タイトル通りのメモです。元ネタはここです。
CodePipelineでCI/CDを組んでいて、CodeStar Connectionsを使ってCloneしたリポジトリの中のsubmoduleを後続のCodeBuildで使いたかったのですが、なかなか解決策にたどり着けませんでした。
結論から言うと、env.git-credential-helper
を使ってごくシンプルに実現可能です。
buildspecの例は以下です。
version: 0.2
env:
git-credential-helper: yes
phases:
pre_build:
commands:
- git submodule update --init --recursive
注意点としては、Output artifact formatをFull clone(CloudFormationでは CODEBUILD_CLONE_REF
)を指定する必要があることが挙げられます。これを指定しないと.git
フォルダが落ちて来ず、gitコマンドを使うことができません。
他の選択肢
この手法が使えない場合は、別のやり方を模索する必要があります。
CI用のユーザを新規に作成し、そのユーザのトークンをSSMパラメータ等を用いてCodeBuildに持ってくる方法などがあるようですが、やはりやや大仰に感じられますね。
また、CodeBuildにはGitSubmodulesConfig.FetchSubmodules
というオプションもあるのですが、こちらはPipelineでトリガーする場合には使えないようです。
Git submodules config is not supported for CodePipeline source