본문 바로가기
AWS

[ECR] Bitbucket Pipeline 을 이용해 AWS ECR에 이미지 push하기

by yonikim 2021. 5. 1.
728x90

많은 개발자 분들이 git repository로 github 을 사용하겠지만, 우리의 경우 Bitbucket 을 사용했으므로 이를 기준으로 작성하려고 한다. CI/CD 얼마나 중요한가.

 

[사전작업] AWS ECR 세팅하기

 


Bitbucket Pipeline 을 이용해

AWS ECR에 이미지 push하기


 

1. Bitbucket 에서 Pipeline 활성화하기

1) Bitbucket repository 접속 > [Repository settings] 클릭 

 

2) PIPELINES [Settings] 클릭 > Enable Pipelines 활성화

 

3) PIPELINES [Repository variables] 클릭 > 공통으로 사용할 환경변수 값 입력

 

4) PIPELINES [Deployments] 클릭 > deployment명 별로 사용할 환경변수 값 입력

 

 

▷ bitbucket-pipeline.xml

* 브랜치명에 의해 이벤트 발생 

$ git push origin develop

 

pipelines:
  branches:
    develop:
      - step:
          name: Docker build and push to AWS ECR
          services:
            - docker
          image: atlassian/pipelines-awscli
          deployment: Staging
          script:
            - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ECR_REPOSITORY
            - IMAGE=$AWS_ECR_REPOSITORY/$AWS_ECR_REPOSITORY_NAME
            - TAG=staging
            - docker build -t $IMAGE:$TAG . 
              --build-arg ES_HOST=$ES_HOST 
              --build-arg ES_USER=$ES_USER 
              --build-arg ES_PASSWORD=$ES_PASSWORD 
            - docker push $IMAGE:$TAG

 

* 태그명에 의해 브랜치 발생

$ git tag staging-0.0.1
$ git push origin staging-0.0.1 

 

pipelines:
  tags:
    staging-*:
      - step:
          name: Docker build and push to AWS ECR
          services:
            - docker
          image: atlassian/pipelines-awscli
          deployment: Staging
          script:
            - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ECR_REPOSITORY
            - IMAGE=$AWS_ECR_REPOSITORY/$AWS_ECR_REPOSITORY_NAME
            - TAG=$BITBUCKET_TAG
            - docker build -t $IMAGE:$TAG . 
              --build-arg ES_HOST=$ES_HOST 
              --build-arg ES_USER=$ES_USER 
              --build-arg ES_PASSWORD=$ES_PASSWORD 
            - docker push $IMAGE:$TAG

 

* Docker 의 경우 서비스 컨테이너로 취급되므로 기본 메모리 제한은 1024MB 라고 한다. 혹시라도 빌드시에 메모리 이슈가 날 경우 아래 옵션을 추가하여 메모리를 늘려주자.

The Docker-in-Docker daemon used for Docker operations in Pipelines is treated as a service container, and so has a default memory limit of 1024 MB. This can also be adjusted to any value between 128 MB and 3072/7128 MB by changing the memory setting on the built-in docker service in the definitions section.

Source: support.atlassian.com

 

options:             
  docker: true            
  size: 2x            
definitions:          
  services:
    docker:
      memory: 2048
pipelines:
  tags:
    staging-*:
      - step:
          ...

 


 

git push 해주면 아래와 같이 Bitbucket > [Pipelines] 에서 Progress 가 돌기 시작하는데, 

 

Successful 로 완료되면, AWS ECR 리포지토리에 이미지가 잘 push된 걸 확인할 수 있다.

 

 

728x90