실습 3) Jenkins를 활용한 Docker 빌드

Hyerin·2022년 9월 18일
0

깃허브 주소

https://github.com/HYERIN0718/test.git



실습 설명

  1. 개발자는 Springboot 웹애플리케이션의 코드를 Github에 커밋함
  2. Jenkins에서 CI Job을 수행하면 CI가 시작됨(커밋을 가져옴)
  3. Github로 코드를 가져옴
  4. Github에서 Gradle 빌드 스크립트를 내려받음
  5. Jenkins를 통해 코드를 빌드함
  6. Gradle 빌드 스크립트안에는 컴파일 빌드시 코드 라이브러리 의존성 참조를 위해 Artifact Rdpository에서 Artifact를 가져옴
  7. JibGradle코드를 가져옴
  8. Artifact를 포함해 생성된 패키지는 GradleJib 플러그인을 포함해 Docker 이미지 빌드함
  9. 빌드된 이미지는 Jib을 통해 이미지 레파지토리인 AWS ECR에 Push되고 CD가 진행됨
  10. CD는 젠킨스가 CD JoB을 배포대상 서버인 AWS EC2 VM의 SSH로 접속하고 배포 명령어를 실행해 진행됨
  11. AWS ECR에 저장된 도커이미지를 가져와서 컨테이너를 실행함
  12. 컨테이너가 실행되면 Springboot 웹 어플리케이션이 실행되어 80포트로 노출되며 HTTP 웹접속이 가능해짐
  13. CD Job이 완료되면 개발자는 본인이 개발한 스프링부트 웹 애플리케이션이 정상적으로 배포및 실행되었는지 확인하기 위해 배포 서버의 퍼블릭주소에서 80포트로 웹 브라우저에 접속함
    웹페이지접속을 하면 정상적으로 도커활용이라는 웹페이지가 출력됨

실습 과정

1. pipeline 만들기

새로운 Item 만들기 -> Pipeline 선택 -> 이름 작성

Repository URL에 HTTPS 링크를 넣어야함 main 브랜치 작성

Script Path

젠킨스 파일의 위치(깃허브)를 지정한다.
예제 코드를 Github 레파지토리에서 가져오는 만큼 파이프라인으로 사용되는 레파지토리에 저장된 파일의 위치를 적어야 한다.
CI/CD 작업을 하기 위해 IDE 에 Github 레파지토리를 다운받아서 실행


2. Jenkins를 이용해서 빌드하기

def mainDir="Chapter02/2-jenkins-docker" // 메인 디렉토리
def ecrLoginHelper="docker-credential-ecr-login" // ECR에 push할 때 필요한 로그인을 미리 전역변수로 적어둠
def region="us-east-1" // 사용하는 리전
def ecrUrl="436115905187.dkr.ecr.us-east-1.amazonaws.com/test" // ECR url
def repository="test" // 프라이빗 fp파지토리
def deployHost="172.31.81.217" // 배포서버 - AWS EC2 프리이빗 IP

pipeline { // 파이프라인을 stage별로 나눠서 명시함, 흐름을 파악할 때 사용
    agent any

    stages {
        stage('Pull Codes from Github'){
            steps{
                checkout scm
            }
        }
        stage('Build Codes by Gradle') { // Gradle을 이용한 빌드과정
            steps {
                sh """
                cd ${mainDir}
                ./gradlew clean build
                """
            }
        }
        stage('Build Docker Image by Jib & Push to AWS ECR Repository') {
            steps {
                withAWS(region:"${region}", credentials:"aws-key") { // us-east-1 리전과 ECR에 로그인하기 위한 key
                    ecrLogin()
                    sh """
                        curl -O https://amazon-ecr-credential-helper-releases.s3.us-east-1.amazonaws.com/0.4.0/linux-amd64/${ecrLoginHelper} // ECR credentials helper를 다운 받음
                        chmod +x ${ecrLoginHelper}
                        mv ${ecrLoginHelper} /usr/local/bin/ // helper를 실행할 수 있도록 PATH로 옮김
                        cd ${mainDir}
                        ./gradlew jib -Djib.to.image=${ecrUrl}/${repository}:${currentBuild.number} -Djib.console='plain' // helper는 jib을 통해 이미지를 빌드할 수 있고, gradlew를 통해 aws ECR에 레파지토리에 push함
                    """
                }
            }
        }
        stage('Deploy to AWS EC2 VM'){
            steps{
                sshagent(credentials : ["deploy-key"]) { // 젠킨스에 접속하기 위한 key
                    sh "ssh -o StrictHostKeyChecking=no ubuntu@${deployHost} \
                     'aws ecr get-login-password --region ${region} | docker login --username AWS --password-stdin ${ecrUrl}/${repository}; \
                      docker run -d -p 80:8080 -t ${ecrUrl}/${repository}:${currentBuild.number};'"
                }
            }
        }
    }
}

빌드 성공



오류 모음

  1. Docker 빌드 Jib FAILED
profile
DevOps, 코딩 기록

0개의 댓글