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_nameexample
AWS_DEFAULT_REGIONap-northeast-1
IMAGE_REPO_NAMEECRのリポジトリ名
CONTAINER_NAMEECS Taskに設定しているコンテナ名

また、マネージド型のイメージで[[aws/codebuild/standard:2.0]]を利用する場合は[[runtime-versions]]の設定を書いておかないとエラーになるので注意。

参考


Related #aws

Step Functionsステートマシンから別のStep Functionsを呼び出す

複雑なステートマシンを小さいステートマシンに分割しておけばテストと確認がやりやすくなる

マネージメントコンソール上のエディタでLambdaのコードを書く際にnpmライブラリを追加したい

ローカルでライブラリをインストールしてからインポートする必要があった

Amazon API Gatewayのタイムアウト設定は最大29秒まで

上限緩和もできないので注意

MFA必須のスイッチロールアカウントでaws cliを使う

switch role用のprofileを追加する

AWSのコスト異常検出を設定する

意図しない課金を防ぐためにとりあえず設定しておくと良さそう