Cloud Build は、Google Cloud Platform (GCP) が提供するフルマネージドの継続的インテグレーション/継続的デリバリー(CI/CD)プラットフォームです。ソースコードのビルド、テスト、デプロイを自動化し、コンテナイメージやその他のアーティファクトを作成できます。Cloud Buildは、ビルドステップを柔軟に定義でき、さまざまな言語やフレームワークに対応しています。
Cloud Buildは以下の主要コンポーネントで構成されています:
コンポーネント | 説明 |
---|---|
ビルド構成ファイル | ビルドステップとパラメータを定義するYAMLまたはJSONファイル |
ビルドステップ | ビルドプロセスの個々のタスク。各ステップは独自のコンテナで実行される |
ビルドトリガー | 特定のイベント(コミット、タグ作成など)に応じて自動的にビルドを開始する仕組み |
ビルドワーカー | ビルドを実行する仮想マシン。デフォルトのプールまたはプライベートプールで実行可能 |
アーティファクト | ビルドの結果生成されるファイル(コンテナイメージ、バイナリなど) |
Cloud BuildとJenkinsはどちらもCI/CDツールですが、以下のような違いがあります:
Cloud Buildは、Google Cloud Console、gcloud CLIツール、またはAPIを使用して利用できます。
ビルド構成ファイル(cloudbuild.yaml)は、ビルドプロセスのステップを定義します:
steps:
# Dockerイメージをビルド
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA', '.']
# ビルドしたイメージをContainer Registryにプッシュ
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA']
# GKEにデプロイ
- name: 'gcr.io/cloud-builders/kubectl'
args:
- 'set'
- 'image'
- 'deployment/myapp'
- 'myapp=gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA'
env:
- 'CLOUDSDK_COMPUTE_ZONE=asia-northeast1-a'
- 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
# ビルド結果のイメージ
images:
- 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA'
# ビルドのタイムアウト設定
timeout: '1800s'
gcloud builds submit --config=cloudbuild.yaml .
gcloud builds submit --config=cloudbuild.yaml https://github.com/username/repo.git
ビルドトリガーを使用すると、リポジトリの変更に応じて自動的にビルドを実行できます:
特定のビルドタスク用にカスタムビルダーを作成できます:
# Dockerfile for custom builder
FROM alpine:3.14
RUN apk add --no-cache python3 py3-pip
RUN pip3 install awscli
ENTRYPOINT ["aws"]
カスタムビルダーをビルドしてContainer Registryにプッシュ:
gcloud builds submit --tag gcr.io/$PROJECT_ID/aws-cli .
カスタムビルダーをビルド構成で使用:
steps:
- name: 'gcr.io/$PROJECT_ID/aws-cli'
args: ['s3', 'cp', 'myfile.txt', 's3://my-bucket/']
ビルド構成ファイルで変数を使用して柔軟性を高めることができます:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}:${_VERSION}', '.']
substitutions:
_SERVICE_NAME: myapp
_VERSION: 1.0.0
options:
env:
- 'NODE_ENV=production'
コマンドラインから変数を上書き:
gcloud builds submit --config=cloudbuild.yaml \
--substitutions=_SERVICE_NAME=newapp,_VERSION=2.0.0 .
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud secrets versions access latest --secret=my-api-key > /workspace/api-key.txt
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '--build-arg', 'API_KEY=$(cat /workspace/api-key.txt)', '-t', 'gcr.io/$PROJECT_ID/myapp', '.']
Cloud BuildはGoogle Cloud Monitoringおよびロギングと統合されており、ビルドの状態とパフォーマンスを監視できます:
Pub/Subを使用してビルド通知を設定できます:
gcloud pubsub topics create cloud-builds
gcloud pubsub subscriptions create cloud-builds-subscription --topic=cloud-builds
gcloud services enable cloudbuild.googleapis.com
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
--role=roles/pubsub.publisher
Cloud Buildのコストを最適化するためのベストプラクティス:
steps:
# キャッシュからnode_modulesを復元
- name: 'gcr.io/cloud-builders/gsutil'
id: 'restore-cache'
entrypoint: 'bash'
args:
- '-c'
- |
gsutil cp gs://$PROJECT_ID-cache/node-modules.tar.gz /tmp/ || exit 0
if [ -f /tmp/node-modules.tar.gz ]; then
tar -xzf /tmp/node-modules.tar.gz
fi
# 依存関係をインストール
- name: 'node:14'
id: 'install'
entrypoint: 'npm'
args: ['install']
# node_modulesをキャッシュに保存
- name: 'gcr.io/cloud-builders/gsutil'
id: 'save-cache'
entrypoint: 'bash'
args:
- '-c'
- |
tar -czf /tmp/node-modules.tar.gz node_modules
gsutil cp /tmp/node-modules.tar.gz gs://$PROJECT_ID-cache/node-modules.tar.gz
# ビルドを実行
- name: 'node:14'
id: 'build'
entrypoint: 'npm'
args: ['run', 'build']
Cloud Buildは以下のようなユースケースに適しています:
Cloud Buildは他のGoogle Cloudサービスと統合して、より強力なCI/CDパイプラインを構築できます:
サービス | 統合の利点 |
---|---|
Artifact Registry | コンテナイメージ、言語パッケージ、その他のアーティファクトの安全な保存 |
Cloud Deploy | 複数環境への段階的なデプロイの管理と自動化 |
GKE | Kubernetesクラスタへのコンテナアプリケーションのデプロイ |
Cloud Run | サーバーレス環境へのコンテナのデプロイ |
Cloud Source Repositories | プライベートGitリポジトリとの統合 |
Secret Manager | ビルドプロセスでの機密情報の安全な管理 |
Binary Authorization | 信頼できるコンテナイメージのみをデプロイするポリシーの適用 |
Cloud Build は、Google Cloud Platform上でのCI/CDパイプラインの構築と実行を簡素化するフルマネージドサービスです。柔軟なビルド構成、多様なソース統合、セキュリティ機能などにより、開発チームはインフラストラクチャの管理ではなく、アプリケーション開発に集中できます。
Cloud Buildの主な利点は以下の通りです:
Cloud Buildを効果的に活用するには、ビルド構成の最適化、キャッシュの活用、適切なセキュリティ対策の実装が重要です。また、他のGCPサービスと組み合わせることで、エンドツーエンドの自動化されたデプロイパイプラインを構築することができます。