[CI/CD] GitHub, Jenkins, Docker를 활용한 CI/CD 환경 구축 - 4

chrkb1569·2024년 1월 4일
0

개인 프로젝트

목록 보기
27/28

지난 시간에는 간단하게 Docker 컨테이너 위에서 동작하는 Jenkins와 github를 연동해보았습니다.

그리고 webhook를 통해 Jenkins에서 자동으로 빌드되는 환경을 구축해보았습니다.

Jenkins에서 빌드가 발생하는 경우,

1) gradle을 통하여 jar 파일 생성
2) 프로젝트 내부에 위치한 Dockerfile을 빌드 이후, 이미지를 Docker hub에 전송

다음 2가지의 작업이 실행되어야합니다.

오늘은 Jenkins에서 이미지를 빌드하고, 이를 Docker hub로 전송해보도록 하겠습니다.

Docker Hub Credential

Docker 이미지를 빌드한 뒤, 이를 Docker hub로 push하기 위해서는 권한이 필요합니다.

로컬 환경일 경우에는 docker login을 통해 아이디와 비밀번호를 입력해주면 해결할 수 있지만, 우리는 Jenkins 파일에서 push 명령어를 사용하기 때문에 해당 명령어를 사용할 수 없습니다.

따라서, Jenkins에 Docker 계정 정보를 저장해주어야 권한으로 인한 오류가 발생하지 않습니다.

계정을 등록하는 과정은 github 계정을 등록했던 과정과 매우 유사합니다.

Docker Hub -> My Account로 이동

Security로 이동

다음처럼 Access Tokens라는 메뉴를 확인할 수 있는데, New Access Token을 통하여 토큰을 생성해줍니다.

토큰이 정상적으로 생성될 경우, 이를 복사하여 Jenkins에 등록해줍니다.

Dockerfile

FROM openjdk:17-oracle

VOLUME /tmp

ARG JAR_FILE=/build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["nohup", "java", "-jar", "app.jar", "&"]

Application Server에서 jar파일을 실행하기 위한 Dockerfile입니다.

Jenkinsfile

pipeline {
    agent any

    stages {
        stage('Clone Repository') {
            steps {
                git branch: 'main', url: "https://github.com/chrkb1569/DevOps-Practice"
            }
        }

        stage('Build Project') {
            steps {
                sh './gradlew clean build'
            }
        }

        stage('Docker Login') {
            steps {
                sh 'echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin'
            }
        }

        stage('Build Docker Image') {
            steps {
                sh 'docker build -t chrkb1569/jenkins:test .'
            }
        }

        stage('Push Docker Image') {
            steps {
                sh 'docker push chrkb1569/jenkins:test'
            }
        }
    }
}

프로젝트 빌드 과정에서 jar 파일을 생성하고 docker image 빌드 이후 push하는 Jenkins 파일입니다.

환경 변수로 Docker 아이디와 비밀번호를 등록해줘야 빌드 과정에서 이미지를 push할 수 있습니다.

빌드 테스트

빌드가 성공적으로 완료됨을 확인할 수 있으며,

docker hub에 이미지가 저장되었음을 확인할 수 있습니다.

0개의 댓글