ひとつのリポジトリで管理するソースコードから複数のサービスを提供したいことがあったりします。
ひとつのリポジトリではひとつのサービスをというほうが綺麗なのかもしれませんが、過渡期などいろんな経緯でそういうケースもままありそうに思います。
ということで、ひとつのリポジトリから複数サービスに対してビルドやデプロイがしやすいように、Cloud Buildのビルド構成ファイルについて試してみます。
公式ドキュメントを参考にビルド構成ファイルを作成しますが、その際にサービス名を調整するなどしてそれぞれ作成します。
– cloudbuild-SERVICE_A.yaml
1 2 3 4 5 6 7 |
steps: # Build the container image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/PROJECT_ID/SERVICE_A', '.'] # Push the container image to Container Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/PROJECT_ID/SERVICE_A'] |
– cloudbuild-SERVICE_B.yaml
1 2 3 4 5 6 7 |
steps: # Build the container image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/PROJECT_ID/SERVICE_B', '.'] # Push the container image to Container Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/PROJECT_ID/SERVICE_B'] |
作成したそれぞれのビルド構成ファイルを config オプションで指定してビルドを実行します。
1 2 |
gcloud builds submit --config cloudbuild-SERVICE_A.yaml gcloud builds submit --config cloudbuild-SERVICE_B.yaml |
ステップどおり無事にビルドされたコンテナイメージがContainer Registryに配置されました。
ステップやDockerfileなど柔軟に記載できるようになるため、ひとつのリポジトリで複数サービスを扱うにあたり制御しやすくなるかと思います。
加えてトリガー連携で自動化するなど、引き続きより良くしていけたらと思います。