CICD

Jenkins PipeLine으로 Docker Image 만들고 배포하기

웅둘 2023. 9. 18. 13:53

Jenkins 2.401.1 버전 기준으로 작성한 내용입니다.

 

Docker Hub Credential 만들기

 

토큰 생성

  1. Account Settings → Security → New Access Tokens
  2. Access Token Description (원하는 이름 입력) → Generate
  3. Token 창을 끄면 다시 확인할 수 없음으로 Token을 복사해둔다.

 

Credential 만들기

1. Jenkins 대시보드 → Jenkins 관리 → Credentials → 아래의 gloabl 클릭 → Add credentials

2. New Credentials

  • Kind → Username with password
  • Username : Docker hub id
  • Password : Docker hub Token
  • ID : 원하는 이름 지정

 

Pipeline 생성

Docker pipeline 플러그인 설치

  1. Jenkins Dashboard → Jenkins 관리 → Plugins → Available Plugins
  2. Docker pipeline 검색 후 설치 → 설치가 끝나고 Jenkins 재시작

Jenkins Dashboard → 새로운 Item → 원하는 이름 입력 후 → Pipeline 생성

  • Build Trigges → Build after other projects are build 선
  • Project to watch → 파이프라인과 연결할 Project 입력
  • Trigger only if build is stable 선택

연결된 프로젝트가 빌드가 될 경우에만 Pipline 프로젝트가 실행됩니다.

 

 

Script

pipeline { 
    environment { 
        repository = {docker hub id}/{repository 이름}
        DOCKERHUB_CREDENTIALS = credentials({생성한 Docker hub Credentials}) 
  }
  agent any 
  stages { 
      stage('Building our image') { 
          steps { 
              script { 
                  sh "cp {연결된 Project의 Workspace jar 파일 위치} {Workspace Pipeline 경로}" // jar 파일을 현재 위치로 복사
                  sh "cd {Workspace Pipeline 경로}" // 해당 경로로 이동
                  sh "docker build -f dockerfile . --tag $repository:latest" // 도커 이미지 빌드
              }
          } 
      }
      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:latest' //docker push
              } 
          }
      }      
			stage('Container run') { // 도커 컨테이너 실행 (필요할 경우)
		  steps { 
                sh "cp {연결된 Project의 Workspace jar 파일 위치} {Workspace Pipeline 경로}" // 스크립트 파일을 현재 위치로 복사
                sh "cd {Workspace Pipeline 경로}" // 해당 경로로 이동      
                sh "{실행할 스크립트 파일}"
          }
      }
      stage('Cleaning up') { 
		  steps { 
                sh "docker rmi $repository:$BUILD_NUMBER" // docker image 제거              
          }
      } 
  }
    }

 

Dockerfile

FROM openjdk:17

COPY ./server-1.0.jar .

ENTRYPOINT ["java","-jar","server-1.0.jar"]
  • Dockerfile은 파이프라인 프로젝트가 있는 폴더에 있어야합니다.

 

 

실행

  • 연결된 Project Job 실행 후 작업 완료 시 pipeline이 실행된다.