CodeBuildでソースプロバイダのブランチ名を取得する

これはなに?

CodeBuild内でソースプロバイダのブランチ名を取得するTips。
CodeBuildを利用して、DockerFileよりDockerコンテナを作成する際に、ビルドするソースのブランチによって挙動を変えたくて調査しました。
ソースプロバイダは、CodeCommmit。

1. 実現方法

CodeBuildのビルドイン環境変数の CODEBUILD_SOURCE_VERSION を環境変数として呼んであげるようにBuildspecを書いてあげればOK。
ただし、取得した値にはディレクトリのPath(refs/heads/)も入っているので純粋にブランチ名だけ取得する場合は、整形してあげる必要があります。

Buildspec サンプル

version: 0.1
phases:
  build:
    commands:
      - echo $CODEBUILD_SOURCE_VERSION #ディレクトリ有りブランチ名
      - echo $CODEBUILD_SOURCE_VERSION | sed -e 's!refs/heads/!!' #ディレクトリ無しブランチ名

その他の環境変数については以下を参照ください。 ビルド環境の環境変数 - AWS CodeBuild

2. テスト

サンプルのBuildspecを利用して、ブランチを分けてビルドを実行、実行結果を確認します。

ソースを masterブランチ としてBuildを実行した場合

ブランチ名の master が取得できています。

[Container] 2020/07/26 13:34:29 Entering phase BUILD
[Container] 2020/07/26 13:34:29 Running command echo $CODEBUILD_SOURCE_VERSION
refs/heads/master
[Container] 2020/07/26 13:34:29 Running command echo $CODEBUILD_SOURCE_VERSION | sed -e 's!refs/heads/!!'
master

ソースを dev ブランチ としてBuildを実行した場合

ブランチ名の dev が取得できています。

[Container] 2020/07/26 13:49:33 Entering phase BUILD
[Container] 2020/07/26 13:49:33 Running command echo $CODEBUILD_SOURCE_VERSION
refs/heads/dev
[Container] 2020/07/26 13:49:33 Running command echo $CODEBUILD_SOURCE_VERSION | sed -e 's!refs/heads/!!'
dev

以上でCodeBuild内でブランチ名を取得できるので後はよしなに。