CodePipeline + CodeBuildでECRにpushする際にGitのコミットハッシュをタグ名に設定する
CODEBUILD_RESOLVED_SOURCE_VERSION環境変数にコミットハッシュが設定されているので、パイプでつないで[[head -c 7]]で短縮形のハッシュを取得するようにした。
[[buildspec.yml]]の全体像は以下。
version: 0.2
phases:
install:
runtime-versions:
docker: 18
pre_build:
commands:
- echo Logging in to Amazon ECR...
- $(aws ecr get-login --no-include-email --region ${AWS_DEFAULT_REGION})
- AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
- REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}
- IMAGE_TAG=$(echo ${CODEBUILD_RESOLVED_SOURCE_VERSION} | head -c 7)
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t ${IMAGE_REPO_NAME}:${IMAGE_TAG} .
- docker tag ${IMAGE_REPO_NAME}:${IMAGE_TAG} ${REPOSITORY_URI}:${IMAGE_TAG}
- docker tag ${IMAGE_REPO_NAME}:${IMAGE_TAG} ${REPOSITORY_URI}:latest
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push ${REPOSITORY_URI}:${IMAGE_TAG}
- docker push ${REPOSITORY_URI}:latest
- >-
printf "[{\"name\":\"${CONTAINER_NAME}\",\"imageUri\":\"%s\"}]"
${REPOSITORY_URI}:${IMAGE_TAG}
> imagedefinitions.json
artifacts:
files: imagedefinitions.json
前提としてCodeBuildの環境変数設定で以下を設定してある想定。
env_name | example |
---|---|
AWS_DEFAULT_REGION | ap-northeast-1 |
IMAGE_REPO_NAME | ECRのリポジトリ名 |
CONTAINER_NAME | ECS Taskに設定しているコンテナ名 |
また、マネージド型のイメージで[[aws/codebuild/standard:2.0]]を利用する場合は[[runtime-versions]]の設定を書いておかないとエラーになるので注意。