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에 들어가 아래 내용 진행
-
소스: Github, 내 GitHub 계정의 리포지토리
-
Webhook: 코드 변경이 이 리포지토리에 푸시될 때마다 다시 빌드
-
이벤트 유형:
PULL_REQUEST_CREATED
,PULL_REQUEST_UPDATED
,PULL_REQUEST_REOPENED
-
특정 Branch 이름이나 Tag로 이벤트를 감지 하고 싶다면
Start a build under these condition
에 필터 추가https://docs.aws.amazon.com/codebuild/latest/userguide/github-webhook.html
One or more optional filters
부분 참고 -
환경: 관리형 이미지, Ubuntu, Standard, aws/codebuild/standard:4.0, 권한 승격 활성화
-
서비스 역할: 새 서비스 역할 (Name: default e.g., codebuild-[project_name]-service-role)
프로젝트 생성 후
-
Additional configuration 에 환경 변수 설정:
-
TAG_VERSION(일반 텍스트): latest
이미지 자동 빌드시 latest 태그 사용
-
DOCKERHUB_USER(Secrets Manager): dockerhub:username
-
DOCKERHUB_PW(Secrets Manager): dockerhub:password
겪었던 오류 수정
Additional configuration 에 환경 변수 설정 과정에서 변수명을 TAG_VERSION 으로 설정 했지만 buildspec.yml
에는 변수명을 TAG 로 작성해 태그가 적용이 되지 않았음.
수정 후 태그가 잘 적용됨.
추가: AWS 콘솔에서 변수명 자체를 바꾸는 것 보단 buildspec.yml
을 수정하는게 더 편리하다.
SecretManager 정책상 변수명을 변경하기 힘들어서 관련 정책을 모두 지우고 다시 설정해줘야 하기 때문.
username, password 보안을 위해 Secrets Manager를 활용 참고 문서
-
BuildSpec: default(빈칸, default: buildspec.yml)
-
입력값 필요 없음
-
Artifact: 없음
-
CloudWatch: Default(CloudWatch 로그 선택)
Configure Secrets Manager
Store a new secret - Type: Other type of Secrets - Secret key/vale에 username:
Configure IAM policy
secret manager을 통해 관리하는 dockerhub 관련 정보들을 읽어올 권한을 부여하기 위해
CodeBuildSecretsManagerPolicy-[codebuild project name]-ap-northeast-2
의 Resource에 secretsmanager dockerhub ARN 추가 필요
IAM 정책에 dockerhub secrets resource 추가
CodeBuildSecretsManagerPolicy-[codebuild project name]-ap-northeast-2
검색후 수정하기, Json resource 추가
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를 통해 이미지 빌드 확인
(pull request check 과정에서 조금 기다려야 함)
위 사진 처럼 나오면 문제 없음!