結論としては、可能。
開発の体制として、アプリケーションの開発部隊は、GitHub上でアプリケーションを管理。インフラ部隊はGitHubを利用していない。このような場合、アプリケーション部隊の利用するリポジトリのファイル構成をいじらずに、パイプラインの実行に必要なファイル(buildspec.ymlなど)を配置したいと思い、以下の構成で実現しました。
目次
実装例(Blue/Greenデプロイの場合)
CodePipelineのソースステージにおける、ソースを以下2つ定義する。
- アプリケーションソースの格納:GitHub
- パイプラインの実行に必要な以下のファイル:CodeCommit
- appspec.yaml
- taskdef.json
- buildspec.yml
ここで、一つ疑問がわく。buildspecの「docker build」で指定するDockerfileは、buildspec.ymlが格納されたソース(CodeCommit)と異なり、アプリケーションソース側(GigHub)に存在しているが、どうやって参照すればいいのか・・?
結論、以下のように変数で参照することができる。
プライマリソースアーティファクトのディレクトリは、$CODEBUILD_SRC_DIR で参照できるようになる。他のすべての入力アーティファクトのディレクトリは、$CODEBUILD_SRC_DIR_yourInputArtifactName で参照できる。
例えば、以下のケースの場合。
- Github を使用したソースアクションの出力アーティファクト名を SourceAppArtifact として指定
- Github を使用したソースアクションの出力アーティファクト形式を [デフォルト] として設定
- アプリケーションソースのディレクトリ直下に Dockerfile が存在
この場合、以下のようなコマンドからビルドすることができる。
docker build -t $REPOSITORY_URI:$IMAGE_TAG $CODEBUILD_SRC_DIR_SourceAppArtifact
■ 参考資料
入力アーティファクト
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference-CodeBuild.html#action-reference-CodeBuild-input