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