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

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

CloudWatchアラームを一時的に無効化する

AWS CLIで設定する必要がある

Alexaに気温と二酸化炭素濃度を教えてもらう

「Alexa、気温」でセンサー情報を教えてくれるようになった

CloudWatchのカスタムメトリクスを減らす

あまりチェックしないセンサー値の送信を止めた