목차
테스트 목적
- codebuild 의 buildspec 작성 요령
- codebuild 의 ecr push 를 위한 역할 생성 확인
- codebuild 의 buildspec 에서 phases 정의 후 ecr push 확인
ECR 은 미리 생성함
1. CodeBuild 생성
1.1 Project configuration
1.2 Source
branch 로 reference type 을 설정
main - default branch
1.3 Enviornment
사진엔 체크 되어있지 않지만
Privileged 를 체크해줘야만 docker 명령어가 사용 가능하다.
Service Role 이름을 알아볼 수 있게 수정해주고
time 은 기본값으로 두었다
ECR 에 push 하기 위한 환경변수들을 미리 추가해줬다
1.4 etc
cloudwatch 로 가서 log group 생성해주고 stream 은 여기서 이름만 지정해주면 알아서 생성됨
1.5 인라인 정책 연결
필요한 정책 연결
ECR 로 검색해서
위 액션에 있는 정책들과
GetAuthorizationToken
내 ECR arn 을 추가해줌
이후 정책명 입력 후 정책 추가
2. buildspec
buildspec.yml 개요
buildspec 파일 이름 및 스토리지 위치
buildspec을 소스 코드의 일부로 포함하는 경우, 기본적으로 buildspec 파일에 buildspec.yml이라는 이름을 지정해야 하며 이 파일을 소스 디렉터리의 루트에 배치해야 합니다.
기본 buildspec 파일 이름과 위치를 재정의할 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.
- 동일한 리포지토리의 다른 빌드에 대해 buildspec_debug.yml 및 buildspec_release.yml과 같은 다른 buildspec 파일을 사용합니다.
- buildspec 파일을 config/buildspec.yml과 같은 소스 디렉터리의 루트가 아닌 다른 위치 또는 S3 버킷에 저장합니다. S3 버킷은 빌드 프로젝트와 동일한 AWS 리전에 있어야 합니다. ARN을 사용하여 buildspec 파일을 지정합니다(예: arn:aws:s3:::my-codebuild-sample2/buildspec.yml).
buildspec 파일의 이름과 상관없이, 한 빌드 프로젝트에 대해 하나의 buildspec만 지정할 수 있습니다.
기본 buildspec 파일 이름이나 위치 또는 둘 다를 재정의하려면 다음 중 하나를 수행합니다.
- buildspec 값을 내장 환경 변수 CODEBUILD_SRC_DIR의 값에 상대적인 대체 buildspec 파일의 경로로 설정하여 AWS CLI create-project 또는 update-project 명령을 실행합니다. 또한 AWS SDK의 create project 작업과 동등한 작업을 수행할 수 있습니다. 자세한 내용은 빌드 프로젝트 생성 또는 빌드 프로젝트 설정 변경 섹션을 참조하세요.
- buildspecOverride 값을 내장 환경 변수 CODEBUILD_SRC_DIR의 값에 상대적인 대체 buildspec 파일의 경로로 설정하여 AWS CLI start-build 명령을 실행합니다. 또한 AWS SDK의 start build 작업과 동등한 작업을 수행할 수 있습니다. 자세한 정보는 빌드 실행을 참조하세요.
- AWS CloudFormation 템플릿에서 AWS::CodeBuild::Project 유형의 리소스에 있는 Source의 BuildSpec 속성을 내장 환경 변수 CODEBUILD_SRC_DIR의 값에 상대적인 대체 buildspec 파일의 경로로 설정합니다. 자세한 내용은 AWS CloudFormation사용 설명서에서 AWS CodeBuild프로젝트 소스의 BuildSpec 속성을 참조하십시오.
2.1 buildspec.yml
version: 0.2
env:
variables:
IMAGE_TAG: 1
phases:
pre_build:
commands:
- echo $AWS_DEFAULT_REGION
- echo $AWS_ACCOUNT_ID
- echo $IMAGE_REPO_NAME
build:
commands:
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
2.2 Dockerfile
FROM nginx:latest
COPY app/ /usr/share/nginx/html/
EXPOSE 80
디렉토리에는 확인을 위한 텍스트파일 하나 더 생성해줌
3. commit 후 CI 동작 확인
codebuild project 로 돌아가서 start build
해당 build status 아래에서 자세한 로그 확인 가능
참고
https://dev.classmethod.jp/articles/deploying-docker-images-to-ecr-using-aws-code-pipeline/
https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-env-ref-env-vars.html
https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/repository-policy-examples.html
'AWS > CI CD' 카테고리의 다른 글
AWS CodeBuild - DOWNLOAD_SOURCE 단계 dial tcp i/o timeout Error (0) | 2024.07.13 |
---|---|
Codebuild + awscli : lambda image update (0) | 2023.08.16 |
AWS CodeBuild - push to Github (0) | 2023.08.10 |
AWS CodeCommit demo (0) | 2023.08.09 |