[Jenkins] Jenkins pipeline을 구축하여 Docker build 및 이미지 push 하기

sue·2022년 6월 27일
3

Jenkins

목록 보기
3/3
post-thumbnail

1. Docker pipeline 플러그인 설치

  • Docker를 사용하여 pipeline을 구축하기 위해서는 Docker pipeline 플러그인을 설치해야 한다.
  • Dashboard > Jenkins 관리 > 플러그인 관리 > 설치 가능 > docker pipeline 검색 후 설치 > 설치가 끝나고 실행중인 작업이 없으면 Jenkins 재시작을 체크하면 jenkins가 재시작 된다.

2. Docker Hub Credentials 등록

  • DockerHub token을 등록해 줘야 jenkins를 통해 docker push 시 Docker Hub 로그인 과정에서 권한 관련 오류가 나지 않는다.
  • 먼저 Docker Hub token을 발급한다.
  • Docker Hub에 접속 > Account Settings 클릭 > Security > New Access Tokens 클릭 > Access Token Description 입력 (원하는 이름으로 입력하면 된다.) > Generate 클릭 > token 복사
  • token은 창이 꺼지면 다시 확인할 수 없으므로 copy 후 잘 저장해놓도록 한다.

  • Jenkins 대시보드로 돌아와서 Jenkins 관리 > Manage Credentials > Add Credentials 선택
  • Username: Docker hub id 입력
  • Password: Docker hub token 입력
  • ID: 원하는 credetial 이름 지정
  • ex) dockerhub-jenkins

3. pipeline 생성

  • Dashboard > 새로운 item > Pipeline 선택 후 이름 입력 > ok

  • 스프링 부트 프로젝트 build 작업이 끝나면 파이프라인이 실행어야 하기 때문에 별도의 설정을 해야한다.
  • Build Triggers 에서 Build after other projects are built 선택 > Projects to watch에 파이프라인과 연결할 project 이름을 입력 > Trigger only if build is stable 선택

  • Pipeline 에는 Pipline script를 작성한다.
  • pipeline이 실행될 과정을 작성하는 script라고 생각하면 됩니다.

script 작성법과 문법은 나중에 더 자세히 다루도록 하겠습니다.

  • pipeline script
pipeline { 
    environment { 
        repository = "sue/jenkins"  //docker hub id와 repository 이름
        DOCKERHUB_CREDENTIALS = credentials('sue-dockerhub') // jenkins에 등록해 놓은 docker hub credentials 이름
        dockerImage = '' 
  }
  agent any 
  stages { 
      stage('Building our image') { 
          steps { 
              script { 
                  sh "cp /var/lib/jenkins/workspace/sue_jenkins_project/build/libs/sue-member-0.0.1-SNAPSHOT.war /var/lib/jenkins/workspace/pipeline/" // war 파일을 현재 위치로 복사 
                  dockerImage = docker.build repository + ":$BUILD_NUMBER" 
              }
          } 
      }
      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 제거
          }
      } 
  }
    }
    

  • 작성 완료 후 저장을 누르고 빠져나온다.

4. Dockerfile 작성

  • image를 build 할 수 있는 Dockerfile 작성 필요
  • 파이프라인 프로젝트가 있는 폴더 하위에 Dockerfile을 생성
$ sudo vi /var/lib/jenkins/workspace/pipeline/Dockerfile

FROM openjdk:8-jre-slim
  
WORKDIR /app

COPY ./sue-member-0.0.1-SNAPSHOT.war .

ENTRYPOINT ["java","-jar","-Dserver.port=8080","sue-member-0.0.1-SNAPSHOT.war"]

5. pipeline 실행

  • 스프링부트 프로젝트를 build하는 job 실행 후 작업 완료 시 docker pipeline이 작업되는 것을 확인할 수 있다.

  • 스프링부트 프로젝트 build 시작

  • 스프링부트 프로젝트 완료 후 docker pipeline build 시작

  • docker pipeline 콘솔 로그

질문이 있거나 부족한 점이 있으면 댓글 남겨 주시길 바랍니다. 감사합니다. 🙂

profile
All is well ! 🔥

2개의 댓글

comment-user-thumbnail
2024년 1월 5일

pipeline 스크립트에서, $DOCKERHUB_CREDENTIALS_PSW나 $BUILD_NUMBER와 같은 변수는 어디에서 정의하는거죠?

1개의 답글