Devops Tutorial


개요

이전 도커 이미지 빌드, 컨테이너 실행에 이어서 AWS CodeBuild 를 이용해 도커 이미지 빌드 자동화 적용


AWS CodeBuild 공식 사이트 https://aws.amazon.com/ko/codebuild/



AWS CodeBuild 프로젝트 생성

buildsepc.yml 생성

도커 이미지 빌드 자동화 AWS CodeBuild를 사용하기 위해선 최상위 디렉토리에 CodeBuild의 작업을 정의한 buildspec.yml를 생성해야한다.


buildspec.yml

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Docker Hub...
      - docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PW
      - TAG="$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | head -c 8)"
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $IMAGE_REPO_NAME:$TAG_VERSION .
      - docker tag $IMAGE_REPO_NAME:$TAG_VERSION $IMAGE_REPO_NAME:$TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $IMAGE_REPO_NAME:$TAG_VERSION
      - echo Writing image definitions file...
     


https://github.com/yonghanJu/DevopsTutorial/blob/master/buildspec.yml




Set up AWS CodeBuild

AWS CodeBuild에 들어가 아래 내용 진행

  1. 소스: Github, 내 GitHub 계정의 리포지토리

  2. GitHub Personal access token 생성 필요

  1. 권한은 repo, admin:repo_hook
  1. Webhook: 코드 변경이 이 리포지토리에 푸시될 때마다 다시 빌드

  2. 이벤트 유형: PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_REOPENED

  3. 특정 Branch 이름이나 Tag로 이벤트를 감지 하고 싶다면 Start a build under these condition에 필터 추가

    https://docs.aws.amazon.com/codebuild/latest/userguide/github-webhook.html

    One or more optional filters 부분 참고

  4. 환경: 관리형 이미지, Ubuntu, Standard, aws/codebuild/standard:4.0, 권한 승격 활성화

  5. 서비스 역할: 새 서비스 역할 (Name: default e.g., codebuild-[project_name]-service-role)




프로젝트 생성 후

  1. Additional configuration 에 환경 변수 설정:

  2. TAG_VERSION(일반 텍스트): latest

    이미지 자동 빌드시 latest 태그 사용

  3. DOCKERHUB_USER(Secrets Manager): dockerhub:username

  4. DOCKERHUB_PW(Secrets Manager): dockerhub:password



겪었던 오류 수정

수정 내역

Additional configuration 에 환경 변수 설정 과정에서 변수명을 TAG_VERSION 으로 설정 했지만 buildspec.yml에는 변수명을 TAG 로 작성해 태그가 적용이 되지 않았음.

수정 후 태그가 잘 적용됨.

추가: AWS 콘솔에서 변수명 자체를 바꾸는 것 보단 buildspec.yml 을 수정하는게 더 편리하다.

SecretManager 정책상 변수명을 변경하기 힘들어서 관련 정책을 모두 지우고 다시 설정해줘야 하기 때문.



username, password 보안을 위해 Secrets Manager를 활용 참고 문서



  1. BuildSpec: default(빈칸, default: buildspec.yml)

  2. 입력값 필요 없음

  3. Artifact: 없음

  4. CloudWatch: Default(CloudWatch 로그 선택)



Configure Secrets Manager

Secret Managers 이동

DockerHub 자격증명 저장

Store a new secret - Type: Other type of Secrets - Secret key/vale에 username: , password: 입력 - Secret Name: ```dockerhub```



Configure IAM policy

secret manager을 통해 관리하는 dockerhub 관련 정보들을 읽어올 권한을 부여하기 위해

CodeBuildSecretsManagerPolicy-[codebuild project name]-ap-northeast-2의 Resource에 secretsmanager dockerhub ARN 추가 필요

Secertmanager dockerhub ARN

alt text



IAM 정책에 dockerhub secrets resource 추가

IAM policy

CodeBuildSecretsManagerPolicy-[codebuild project name]-ap-northeast-2 검색후 수정하기, Json resource 추가


alt text


AWS CodeBuild 설정 완료



AWS CodeBuild 작동 유무 확인하기


https://ap-northeast-2.console.aws.amazon.com/codesuite/codebuild build > project build 에 빌드 내역 확인 가능

https://hub.docker.com 에서 빌드된 이미지 확인 가능

Pull Request 테스트

branch 생성 후 Pull Request, master branch로 merge 되면 자동으로 AWS CodeBuild를 통해 이미지 빌드 확인


alt text

(pull request check 과정에서 조금 기다려야 함)


위 사진 처럼 나오면 문제 없음!