CI & CD/Jenkins

Jenkins pipeline을 이용해서 ECR에 Docker Image 업로드

ZzangHo 2022. 12. 2. 21:51
728x90

Jenkins Pipeline을 이용하여 AWS ECR에 도커 이미지를 올리는 방법에 대해 정리해본다.

 

  • 준비물
  • ECR 생성
  • AWS Credential 생성
  • Jenkinsfile 생성
  • Jenkins Pipeline 생성
  • Jenkins Pipeline 실행

준비물

  1. [Jenkins] Amazon ECR plugin
  2. [Jenkins] AWS Global Configuration Plugin

 

ECR 생성

먼저 이미지를 올릴 ECR 레포지토리를 생성하여야 한다. 

 

1. 아래 그림 1번의 "리포지토리 생성"을 클릭한다.

회사 내 이미지 명칭 가림

 

 

2. 표시 여부 설정은 "프라이빗"으로 그냥 놔두면 되고 아래 그림에서 1번 영역에 리포지토리 이름을 채워 넣고 2번 "리포지토리 생성" 버튼을 클릭하면 된다.

 

3. 그러면 다음 그림의 1번과 같이 정상적으로 생성 된 것을 확인 할 수 있다.

회사 내 이미지 명칭 가림

 

AWS Credential 생성

Jenkins에서 ECR로 이미지를 Push하려면 AWS Credential이 필요하다. 아래 처럼 생성 해줘야 하는데 이미 작성자가 미리 생성해 놓았으니 "AWS_ECR"이라는 걸 쓰면 된다.

Credential 만드는 방법은 아래 그림을 보고 참고 하길 바란다.


① Kind : AWS Credentials 선택

② ID : Credential ID(Credential 이름이라고 보면 된다.)

③ Description : 설명은 안 적어도 되지만 다른 팀원들을 위해 기재하는 것을 추천한다.

④ Access Key ID : Search팀 공용으로 발급 받은 AWS Access Key ID를 넣으면 된다.

⑤ Secret Access Key : Search팀 공용으로 발급 받은 Secret Access Key ID를 넣으면 된다.

 

프로젝트에 Jenkinsfile 생성

 

위와 같이 소스 내에 1번 그림 처럼 Jenkinsfile 이라는 이름의 파일을 만든다.

그 다음 아래처럼 내용을 채워 넣으면 되는데 아래는 maven build -> docker Build -> ECR 로 빌드 된 Docker image를 push 하는 예제이다.

 

 

pipeline {
 
    tools {
        maven('mvn363')         // 개발 Jenkins에 maven이 'mvn363'이라는 이름으로 설치가 되어 있어 pipeline 스크립트에서 사용을 위해 명시를 해주었다.
    }
 
    environment {
        registry = 'xxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/search/sentry-kafka-consumer'     // 개발 AWS에 생성한 컨슈머용 ECR 주소
        registryCredential = 'AWS_ECR'                                                                  // Jenkins에 셋팅한 AWS용 Credential ID
        app = ''
    }
 
    agent any
 
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install'
            }
        }
        stage('Docker Build') {
            steps {
                script {
                    app = docker.build("search/sentry-kafka-consumer:${version}", "--build-arg ENVIRONMENT=${env} .")   // Docker Build를 하는데 나의 경우 version을 Jenkins 매개변수로 입력 받게 셋팅하였다. Jenkins 매개변수는 ${변수명} 이렇게 사용 가능하다
                }
            }
        }
        stage('Push Image') {
            steps {
                script{
 
                    docker.withRegistry("https://" + registry, "ecr:ap-northeast-2:" + registryCredential) {   // withRegistry(이미지 올릴 ECR 주소, Credentail ID) 이렇게 셋팅하면 된다.
                        app.push("${version}")   // tag 정보
                        app.push("latest")       // tag 정보
                    }
                }
            }
        }
    }
}

 

Jenkins Pipeline Job 생성

프로젝트 내에 Jenkinsfile 생성이 완료 되었다면 이제 Jenkins에서 Pipeline Job을 생성해주면 된다.

 

1. Jenkins에서 "New Item" 을 클릭하면 다음과 같은 화면이 나온다. 다음 그림의 1번 "Pipeline"을 클릭한다.

 

2. 아래 그림을 참고하여 Pipeline 설정을 셋팅한다.

 Definition : Pipeline script from SCM 선택
 SCM : Git 선택
 Repository URL : Git 주소 입력
 Credentials : gitlab Credential 선택
 Branche Specifier : Pipeline script from SCM 선택
 Script path : 프로젝트 내에 생성한 Jenkinsfile 입력(소스 내 root가 기본 경로인듯)

 

 

Jenkins Pipeline Job 실행

 

1. 생성 된 Job에서 매개변수 셋팅을 했으면 "파라미터와 함께 빌드" 매개변수 셋팅을 하지 않았으면 "지금 빌드"라고 있을 것이다. 클릭 해준다.

 

2. (매개변수 셋팅을 하였으면) 다음과 같이 매개변수를 입력하는 화면이 나온다. 매개변수 셋팅을 안했으면 이 부분은 Skip하여도 좋다.

왼쪽에 실패한 이력들은 비밀~

3. 실행을 하면 아래 화면 2번 처럼 Stage별로 진행 되는 화면을 볼 수 있다.

여기도 ㅎㅅㅎ

 

4. ECR에 push 된 이미지 확인

'CI & CD > Jenkins' 카테고리의 다른 글

Jenkins Execute Shell에서 cd 명령어  (2) 2023.05.10
Jenkins에서 ECS 실행  (0) 2022.12.09
Jenkins Pipeline 셋팅하기  (0) 2022.03.31
Mac OS에 Jenkins 설치하기  (0) 2022.03.04