GitHubの Google Cloud Build統合 は、リポジトリのルートにない場合、cloudbuild.yaml
またはDockerfile
を検出しません。
複数のcloudbuild.yamls
を含むmonorepoを使用する場合、正しいcloudbuild.yaml
を検出するようにGitHubのGoogle Cloud Build統合を構成するにはどうすればよいですか?
ファイルパス:
services/api/cloudbuild.yaml
services/nginx/cloudbuild.yaml
services/websocket/cloudbuild.yaml
Cloud Build統合出力:
これを行うには、cloudbuild.yaml
を1つのgcr.io/cloud-builders/gcloud
ステップでリポジトリのルートに追加します。このステップは次のようになります。
find
を使用して追加のcloudbuild.yaml
ファイルを探します。cloudbuild.yaml
に対して、gcloud builds submit
を実行してforkし、ビルドを送信します。gcloud
コマンドが完了するのを待ちます。the cloudbuild.yaml
repo 内の ルートGoogleCloudPlatform/cloud-builders-community
でこれを行う1つの方法の良い例があります。
不要な部分を取り除くと、基本的には次のようになります。
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
for d in */; do
config="${d}cloudbuild.yaml"
if [[ ! -f "${config}" ]]; then
continue
fi
echo "Building $d ... "
(
gcloud builds submit $d --config=${config}
) &
done
wait
現在、mono-repoに移行していますが、これをうまく処理するCI/CDソリューションは見つかりませんでした。
重要なのは、変更を検出するだけでなく、その変更に依存するサービスも検出することです。これが私たちがしていることです:
make build
変更の影響を受けるサービス。これまでのところうまくいきますが、これがワークフローに適合しないかどうかは完全に理解できます。
多くの人が使用するもう1つのオプションはBazelです。最も単純なツールではありませんが、Monoリポジトリ全体に多くの異なる言語やビルドプロセスがある場合は特に便利です。