Github와 CodeBuild 연동

hyuckhoon.ko·2021년 8월 9일
0

What I learned in first year

목록 보기
143/146

1️⃣ buildspec.yml

production브랜치에 PR 및 merge가 트리거가 되어 AWS CodeDeploy가 작동되는 구조다.

빈스톡에 배포되는 과정 중간에 CodeBuild 스테이지를 추가했다.
아래와 같이 소스코드 최상단에 buildspec.yml파일을 생성했다.

우선 사전에 아래의 항목이 필요하다.


# buildspec.yml
version: 0.2
env:
  variables:
    REPO: "계정번호.dkr.ecr.ap-northeast-2.amazonaws.com/레포지토리 이름" 

phases:
  pre_build:
    commands:
      - echo docker image build test! 
      - echo $CODEBUILD_SOURCE_VERSION
      - TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | head -c 8)
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --no-include-email --region ap-northeast-2)
  build:
    commands:
      - echo Build start
      - echo Building the Docker image...
      - echo $TAG
      - echo $REPO
      
      
      - docker build --tag $REPO:$TAG --tag $REPO:latest .
  post_build:
    commands:
      - echo Build completed
      - docker push $REPO:$TAG
      - docker push $REPO:latest



2️⃣ 이미지 태그 오버라이딩 문제해결

모든 이미지의 태그명을 latest로 되는 경우, untagged 되는 문제가 발생한다.(dangling)
따라서, 이미지 빌드 시 커밋의 SHA와 latest 라는 두 개의 이중 태그로 지정하여 ECR에 푸시한다.
아래와 같이 latest 태그가 최신화 되는 것을 볼 수 있다.

물론, 레포지토리 설정이 아래와 같이 돼 있어야 한다.





3️⃣ 위 작업을 진행하는 이유

ECS Fargate 혹은 Beanstalk등 어떤 서비스를 사용하든, ECR에서 항상 latest 태그가 부착된 이미지를 사용하면 된다. 또한, 이전 이미지들 역시 커밋 SHA 기반으로 태그됐기에 추적과 관리에 용이하다.



4️⃣ 참고자료

https://stackoverflow.com/questions/49334876/how-to-assign-output-of-a-command-to-a-variable-in-code-build

https://stackoverflow.com/questions/52760651/git-sha-in-codebuild

https://stackoverflow.com/questions/31963525/is-it-possible-for-image-to-have-multiple-tags

https://stackoverflow.com/questions/38587325/aws-ecr-getauthorizationtoken

0개의 댓글