雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

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内でブランチ名を取得できるので後はよしなに。