[Jenkins] AWS ECR에 컨테이너 이미지 업로드하기

Jenkins에서 빌드한 컨테이너 이미지를 AWS ECR(Elastic Container Registry)에 업로드하는 작업을 진행해보겠습니다.
사전에 AWS ECR(Elastic Container Registry)은 생성해둔 상태입니다.

 

 


간단히 ECR 알아보기


사전에 간단히 ECR이 무엇인지 알아보겠습니다.

 

AWS ECR (Amazon Elastic Container Registry)은 Amazon에서 제공하는 Docker 컨테이너 이미지를 저장하고 관리하기 위한 완전관리형 Docker 이미지 저장소입니다. ECR을 사용하면 보안 및 확장성이 뛰어난 프라이빗 이미지 저장소를 손쉽게 생성하고 Docker 컨테이너를 배포할 수 있으며, Amazon ECS (Elastic Container Service) 및 Amazon EKS (Elastic Kubernetes Service)와 통합되어 원활한 컨테이너 관리를 제공할 수 있습니다.

 

 

 


플러그인 설치

우선 Jenkins에서 AWS ECR에 컨테이너 이미지를 업로드하기 위해서는 플러그인을 설치해야됩니다.
설치해야되는 플러그인은 Amazon ECR plugin 입니다.

 

 


AWS Credentials 등록

AWS ECR(Elastic Container Registry)의 Private Repositories를 접근하기 위해서는 Access Key와 Secret Key를 통한 인증이 필요합니다.


플러그인 설치 완료 후 Jenkins 관리 탭을 확인하면 AWS 메뉴가 추가되어 있습니다.

 

 

AWS 메뉴를 통해 AWS Credentials을 등록합니다.

 

 

Kind는 AWS Credentials를 선택합니다.

 

 

이후 설정하고자 하는 Access Key와 Secret Key를 설정하고 저장합니다.

 

 

마지막으로 Region을 선택하고 저장하면 AWS Credentials 등록은 완료됩니다.

 

 


Pipeline 설정

Pipeline script에서 제공하는 docker.builddocker.withRegistry 기능을 통해 Jenkins에서 빌드한 컨테이너 이미지를 AWS ECR(Elastic Container Registry)에 업로드 할 수 있습니다.


사전에 Build 환경이 구성되어야 하며 Dockerfile이 작성되어 docker build 명령어로 바로 도커 컨테이너 빌드가 가능한 상태로 세팅되어야 합니다.

stage('build_and_upload_docker') {
  steps {
    script {
      // 도커 컨테이너 이미지 빌드
      build_data = docker.build("${ECR_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/${IMAGE_NAME}:latest")

      // 도커 컨테이너 이미지 업로드
      // `AWS_CREDENTIALS_ID` 값은 사전에 등록한 AWS Credentials 정보
      docker.withRegistry("https://${ECR_ID}.dkr.ecr.ap-northeast-2.amazonaws.com", "ecr:ap-northeast-2:${AWS_CREDENTIALS_ID}") {
        build_data.push("${TAG_NAME}")
      }
    )
  }
}

위 작업의 내용은 아래와 같습니다.

  • docker.build를 통해 도커 컨테이너 이미지 빌드 작업을 진행합니다.
  • 빌드 작업을 완료하면 완료한 정보는 build_data에 저장합니다.
  • docker.withRegistry를 통해 AWS ECR에 접근합니다.
  • build_data의 push를 통해 저장하고자 하는 TAG 이름으로 AWS ECR에 빌드한 도커 컨테이너 이미지를 업로드 합니다.

${ECR_ID}, ${IMAGE_NAME}, ${AWS_CREDENTIALS_ID}, ${TAG_NAME} 값은 자신에 환경에 맞는 값을 설정하시면 됩니다.

 

 

성공적으로 Jenkins에서 빌드한 컨테이너 이미지를 AWS ECR(Elastic Container Registry)에 업로드 완료하면 아래와 같이 AWS ECR(Elastic Container Registry) 관리 페이지에서 업로드된 도커 컨테이너 이미지를 확인하실 수 있습니다.

 

 


활용

위에 작성한 Pipeline 설정 부분은 기본적인 방법으로 Jenkins에서 빌드한 컨테이너 이미지를 AWS ECR(Elastic Container Registry)에 업로드하는 작업입니다.


옵션 등을 사용하여 실제 업무에서 활용했던 부분을 간략히 추려보았습니다.

pipeline {
  agent any

  // 환경 변수 세팅
  environment {
    AWS_ECR = '123456789.dkr.ecr.ap-northeast-2.amazonaws.com'
    AWS_IMAGE_NAME= 'test'
    AWS_REGION = 'ap-northeast-2'
    AWS_CREDENTIALS_ID = 'AWS_CREDENTIALS_ID_VALUE'
  }

  stage('build_and_upload_docker') {
    steps {
      script {
        // 도커 컨테이너 이미지 빌드
        // -f 등 추가적인 옵션 추가
        build_data = docker.build(
          "${AWS_ECR}/${AWS_IMAGE_NAME}:latest",
          ". -f Dockerfile.patch +@ ETC OPTION"
        )

        // 도커 컨테이너 이미지 업로드
        // Branch 이름 및 기타 정보 등으로 TAG 생성
        docker.withRegistry("https://${AWS_ECR}", "ecr:${AWS_REGION}:${AWS_CREDENTIALS_ID}") {
          build_data.push("${env.gitlabBranch}")
          build_data.push("${env.gitlabBranch}-${env.BUILD_NUMBER}")
          build_data.push("${env.gitlabBranch}-${env.GIT_COMMIT}")
          build_data.push("${env.gitlabBranch}-latest")
        }
      )
    }
  }
}

 

 

 

지금까지 Jenkins에서 빌드한 컨테이너 이미지를 AWS ECR(Elastic Container Registry)에 업로드하는 작업을 알아보는 시간이었습니다....! 끝...!

 

 

 

[Reference]

+ Recent posts