この記事は個人の備忘録です。
やりたいこと
- 1つのビルドプロジェクトで複数のブランチに対応したい
図にすると、
やり方
AWS CodeBuild には、ビルドコマンドで使用できる環境変数が用意されているので、それで条件分岐させる。
今回はCODEBUILD_INITIATORというCodePipelineの名前の環境変数で分岐させることにしました。
ProPopelineとDevPipelineがProブランチとDevブランチを監視しており変更があれば、ターゲットのPipelineを通じてCodeBuildにわたるという仕組みです。
本当はPipelineも1つにしたかったのですが、とりあえず、今回はCodeBuildのみを1つにまとめてみました。
build spec yml例
version: 0.2
phases:
build:
commands:
- echo "CODEBUILD_INITIATOR: $CODEBUILD_INITIATOR"
- |
if [[ "$CODEBUILD_INITIATOR" == "codepipeline/DevPipeline" ]]; then
export S3_BUCKET="**********" # S3_BUCKET名を環境ごにわけたりする
echo "Environment: DEV"
elif [[ "$CODEBUILD_INITIATOR" == "codepipeline/ProPopeline" ]]; then
export S3_BUCKET="**********"
echo "Environment: PRO"
else
echo "Unknown initiator. Exiting."
exit 1
まとめ
こんな感じで無事にブランチごとに乱立しており管理が煩雑だったCodeBuildのプロジェクトを1つにまとめてることができました。
次はPipelineも1つにしたいです。