특다모 Jenkins 적용기 #4

김동연·2023년 11월 9일
0
post-thumbnail

시나리오

  1. git clone
  2. gradle build -> jar
  3. docker build -> image
  4. docker hub 푸쉬
  5. docker hub pull 이 후 실행

0. 목표

local에서 실행되는 프로젝트 생성

이 화면이
http://{배포서버ip}:8080
했을때 나오면된다

1. 프로젝트 생성

1) + 새로운 아이템을 통해 새 프로잭트 생성

2) name을 작성하고 pipeline 선택하여 생성

2. 파이프라인 작성

맨 밑에 이제 파이프라인 작성이 있다.


pipeline {
    environment { 
        repository = "dockerhubId/projectname" //docker hub id와 repository 이름
        DOCKERHUB_CREDENTIALS = credentials('dockerhub') // jenkins에 등록해 놓은 docker hub credentials 이름
        dockerImage = '' 
    }
    agent any
    
	tools {
        gradle 'gradle' // jenkins gradle 설정한 이름
    }
    
  stages { 
      
        stage('github Clone') {
			steps {
                git branch: 'cicd-test', // github branch 이름
                credentialsId: '?????', // github credential id 
                url: 'https://github.com/~~~~~~.git' // github 레포 주소
            }
        }
		stage('BE-Build') {
            steps {
                sh "./gradlew clean build" // jar파일 빌드
            }
    }
      stage('Building our image') { 
          steps { 
              script { 
                  sh "cp /var/jenkins_home/workspace/tdm-backend-deploy/build/libs/tdm-backend-0.0.1-SNAPSHOT.jar /var/jenkins_home/workspace/tdm-backend-deploy/" // jar 파일을 현재 위치로 복사 
                  dockerImage = docker.build repository + ":$BUILD_NUMBER" // 이미지 복사 -> tag에 현제 빌드 번호지정
              }
          } 
      }
      stage('Login'){
          steps{
              sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin' // docker hub 로그인
          }
      }
      stage('Deploy our image') { 
          steps { 
              script {
                sh 'docker push $repository:$BUILD_NUMBER' //docker push
              } 
          }
      } 
      stage('Cleaning up') { 
		  steps { 
              sh "docker rmi $repository:$BUILD_NUMBER" // docker image 제거
          }
      }
                stage('BE-Publish on ssh') {
            steps{
                dir('backend'){
                    sshPublisher(
                        publishers: [
                            sshPublisherDesc(
                                configName: 'ssh- name', // 배포할 ssh servers 이름 (앞서 jenkins system에 설정한)
                                 transfers: [
                                    sshTransfer(
                                        cleanRemote: false,
                                        excludes: '',
                                        execCommand: 'sh /home/ubuntu/script/deploy.sh $BUILD_NUMBER', // 배포할 이미지의 태그번호로 배포 스크립스 실행
                                        execTimeout: 240000,
                                        flatten: false,
                                        makeEmptyDirs: false,
                                        noDefaultExcludes: false,
                                        patternSeparator: '[, ]+',
                                        remoteDirectory: '/deploy',
                                        remoteDirectorySDF: false,
                                        removePrefix: 'build/libs',
                                        sourceFiles: 'build/libs/*.jar'
                                    )
                                ],
                                usePromotionTimestamp: false,
                                useWorkspaceInPromotion: false,
                                verbose: true
                            )
                        ]
                    )
                }
            }
        }
  }

3. 이미지 빌드 Dockerfile 작성

이제 젠킨스에서 이 프로젝트의 Dockerfile을 작성하러 가보자

cd /jenkins/jenkins_home/workspace/docker-test
sudo vi Dockerfile
FROM openjdk:17-jdk-slim
 
ARG JAR_FILE=tdm-backend-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} tdm-backend.jar
ENTRYPOINT ["java","-jar","/tdm-backend.jar"]

4. 배포 스크립트 작성

이제 배포 서버로 접속하여
script 디렉토리를 만들어준다.
도커 설치 잊지 말자
dockerhub를 private으로 할 경우 도커 로그인도 잊지 말자

cd script
sudo vi deploy.sh
chmod +x deploy.sh
echo "이전 컨테이너를 종료합니다."
docker rm -f $(docker ps -aqf "name={프로젝트 이름}")

echo "이전 이미지를 삭제합니다."
docker rmi $(docker images -q --filter "reference={도커허브 아이디}/{도커허브프로젝트}")

echo "이미지를 pull합니다"
docker pull {도커허브 아이디}/{도커허브프로젝트}:$1

docker run -itd -p 8080:8080 --name {프로젝트 이름} {도커허브 아이디}/{도커허브프로젝트}:$1

5. 테스트


지금 빌드를 통해 빌드
이 후 해당 프로젝트가 잘 배포되었는지 확인 ![]

앞으로 더 할일

  1. webhook 설정

1개의 댓글

comment-user-thumbnail
2024년 1월 7일

잘 읽었습니다..!

답글 달기