問題
CodePipeline による一般的なビルドでは Source -> Build -> Deploy という流れで行われる。
今回は Source に CodeCommit を、 Build に CodeBuild を利用して Docker Image を作成したのだが、Docker Image が正常に動作しなかったためその理由を調査した。
結果、CodeCommit 上にシンボリックリンクとして保存されているコンテンツが単なるファイルに置換されていたことが原因で正常に動作しなかった。
検索すれば同様の問題に遭遇した人を見つけることはできた。
これらの記事は解決策までは示してくれなかったが CodeCommit を利用している場合は 簡単な解決策が存在するため、その解決策を以下に示す。
解決策
CodeCommit を利用している場合にのみ利用可能な点に注意
問題が発生する原因は CodePipeline のデフォルト設定の場合 Pipeline のフェーズを引き継ぐなかで S3 に一度ファイルを格納するため、そのタイミングでシンボリックリンクが単なるファイルになってしまうためである。
そのため、直接 Git から clone したコンテンツを元にビルドができれば問題は解消する。 これを利用するためには CodePipeline の Source アクションで、出力アーティファクト形式を「完全クローン」に設定 すればよい。
具体的な手順は例えば以下の記事を参照。