깃허브 주소
Springboot 웹애플리케이션의 코드를 Github에 커밋함Jenkins에서 CI Job을 수행하면 CI가 시작됨(커밋을 가져옴)Gradle 빌드 스크립트를 내려받음Jenkins를 통해 코드를 빌드함Gradle 빌드 스크립트안에는 컴파일 빌드시 코드 라이브러리 의존성 참조를 위해 Artifact Rdpository에서 Artifact를 가져옴Jib에 Gradle코드를 가져옴Gradle과 Jib 플러그인을 포함해 Docker 이미지 빌드함Jib을 통해 이미지 레파지토리인 AWS ECR에 Push되고 CD가 진행됨AWS EC2 VM의 SSH로 접속하고 배포 명령어를 실행해 진행됨AWS ECR에 저장된 도커이미지를 가져와서 컨테이너를 실행함Springboot 웹 어플리케이션이 실행되어 80포트로 노출되며 HTTP 웹접속이 가능해짐
새로운 Item 만들기 -> Pipeline 선택 -> 이름 작성
Repository URL에 HTTPS 링크를 넣어야함
main 브랜치 작성
Script Path

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


