やりたかったこと
CodeCommit→CodeBuildといったCI/CDパイプラインをCodePipelineを用いて構築していました。
コミットに対するGitタグを、CodeBuild内でビルドしたDockerイメージのタグとして利用しようとしていました。
事象
CodeBuild単独で実行すると成功することを確認して、いざCodePipelineで実行…‼︎
とすると、エラーが発生しCodeBuildが失敗していました。エラーメッセージは以下の通り。fatal: not a git repository (or any parent up to mount point /codebuild)
原因
もともと、Sourceステージの設定時に出力アーティファクト形式を、「CodePipelineのデフォルト」に設定していましたが、これが原因でした。
下にちゃんと書いてあるのですが、「CodePipelineのデフォルト」を選択すると、ソースをzip形式でまとめたものがアーティファクトとして出力され、gitメタデータは含まないようです。
そのため、この出力アーティファクトをもとに後続のCodeBuildがgitコマンドを打つと、gitリポジトリでないためエラーになったというわけですね。
解決策
出力アーティファクト形式を「完全クローン」に設定することで解決しました。
「完全クローン」に設定することで、gitクローンが作成されるため、CodeBuild内でgitコマンドを使用できるようになりました。
まとめ
- Sourceステージ以降でgitコマンドを使用する場合は「完全クローン」を指定する
- 書いてあることはちゃんと読まないとハマる
コメント