概要
このラボでは、commit されたコードからコンテナ イメージを自動的にビルドし、そのイメージを Container Registry に格納し、Git リポジトリの Kubernetes マニフェストを更新し、更新したマニフェストを使用してアプリケーションを Google Kubernetes Engine にデプロイする CI / CD パイプラインを作成します。

このラボでは 2 つの Git リポジトリを作成します。
- app リポジトリ: アプリケーション自体のソースコードを含めます。
- env リポジトリ: Kubernetes Deployment のマニフェストを含めます。
app リポジトリに変更を push すると、Cloud Build パイプラインはテストを実施し、コンテナ イメージを作成して Artifact Registry に push します。イメージを push した後、Cloud Build は Deployment マニフェストを更新して env リポジトリに push します。これにより、マニフェストを GKE クラスタに適用する別の Cloud Build パイプラインがトリガーされ、正常に完了すると、このマニフェストが env リポジトリの別のブランチに格納されます。
ライフサイクルと用途が異なるため、app リポジトリと env リポジトリは別々にしておきます。app リポジトリの主なユーザーは実際の人間であり、このリポジトリは特定のアプリケーション専用です。env リポジトリの主なユーザーは自動化されたシステム(Cloud Build など)であり、このリポジトリは複数のアプリケーションで共有される場合があります。env リポジトリにはいくつかのブランチがあり、それぞれが特定の環境にマッピングし(このラボでは本番環境のみを使用します)、特定のコンテナ イメージを参照しますが、app リポジトリにはそのようなブランチは存在しません。
このラボを終了すると、次のことを簡単に行うことができるシステムが完成します。
- Cloud Build の履歴を調べて、失敗したデプロイと成功したデプロイを見分ける。
-
env リポジトリの production ブランチを確認して、現在使用されているマニフェストにアクセスする。
- 以前のバージョンに対応する Cloud Build ビルドを再実行してロールバックする。

注:
このラボでは Cloud Build を使用してパイプラインを実行しますが、Spinnaker、Jenkins など、他の一般的なビルド自動化ツールを代わりに使用することもできます。こうしたツールの中には、Blue/Green デプロイ、カナリア分析など、より高度な CI / CD 実装で必要とされる手法を行う場合に、現時点では Cloud Build より優れたサポートを提供するものもあります。
目標
このラボでは、次のタスクについて学びます。
- Kubernetes Engine クラスタを作成する
- Cloud Source Repositories でリポジトリを作成する
- Cloud Source Repositories から Cloud Build をトリガーする
- Cloud Build でテストを自動化し、デプロイ可能なコンテナ イメージを公開する
- Kubernetes Engine クラスタにデプロイされたリソースを Cloud Build で管理する
設定と要件
Qwiklabs にアクセスする
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
Qwiklabs にシークレット ウィンドウでログインします。
-
ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
-
[Google Console を開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
-
利用規約に同意し、再設定用のリソースページをスキップします。
最初のログイン手順を完了すると、プロジェクト ダッシュボードが表示されます。

Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

-
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
タスク 1. ラボを初期化する
このタスクでは、Google Cloud プロジェクトを使用するための準備を行います。具体的には、必要な API を有効にし、Cloud Shell の Git 構成を初期化して、後ほど使用するサンプル コードをダウンロードします。
- Cloud Shell で次のコマンドを実行して、GKE、Cloud Build、Cloud Source Repositories、Container Analysis の API を有効にします。
gcloud services enable container.googleapis.com \
cloudbuild.googleapis.com \
sourcerepo.googleapis.com \
containeranalysis.googleapis.com
-
my-repository という名前の Artifact Registry Docker リポジトリを リージョンに作成します。このリポジトリにコンテナ イメージを保存します。
gcloud artifacts repositories create my-repository \
--repository-format=docker \
--location={{{project_0.default_region | REGION}}}
- Cloud Shell で、このラボのサンプル アプリケーションをデプロイするために使用する GKE クラスタを作成します。
gcloud container clusters create hello-cloudbuild \
--num-nodes 1 --region {{{project_0.default_region | REGION}}}
- Git を Cloud Shell で使用したことがない場合は、名前とメールアドレスを使用して Git を構成します。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
Git は名前とメールアドレスを使用して、Cloud Shell で作成する commit の作成者を識別します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ラボを初期化する
タスク 2. Cloud Source Repositories で Git リポジトリを作成する
このタスクでは、このラボで使用する 2 つの Git リポジトリ(hello-cloudbuild-app と hello-cloudbuild-env)を作成し、サンプルコードを使用して hello-cloudbuild-app を初期化します。
- Cloud Shell で、2 つの Git リポジトリを作成します。
gcloud source repos create hello-cloudbuild-app
gcloud source repos create hello-cloudbuild-env
-
hello-cloudbuild-app リポジトリのクローンを作成します。
PROJECT_ID=$(gcloud config get-value project)
gcloud source repos clone hello-cloudbuild-app --project=$PROJECT_ID
- 次のコマンドを実行して、Cloud Storage からサンプルコードをコピーし、アーカイブ ファイルからコンテンツをホーム ディレクトリに抽出します。
cd ~
gcloud storage cp gs://cloud-training/gke-gitops/hello-cloudbuild-app.zip ~ && unzip ~/hello-cloudbuild-app.zip -d ~ && rm ~/hello-cloudbuild-app.zip
- Cloud Source Repositories をリモートとして構成します。
cd ~/hello-cloudbuild-app
REGION={{{project_0.default_region | REGION}}}
sed -i s/us-central1/$REGION/g cloudbuild.yaml
sed -i s/us-central1/$REGION/g cloudbuild-trigger-cd.yaml
sed -i s/us-central1/$REGION/g cloudbuild-delivery.yaml
sed -i s/us-central1/$REGION/g kubernetes.yaml.tpl
git init
git add .
git commit -m "first commit"
git remote add google \
"https://source.developers.google.com/p/${PROJECT_ID}/r/hello-cloudbuild-app"
クローンを作成したコードには、単純な「Hello World」アプリケーションが含まれています。
from flask import Flask
app = Flask('hello-cloudbuild')
@app.route('/')
def hello():
return "Hello World!\n"
if __name__ == '__main__':
app.run(host = '0.0.0.0', port = 8080)
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Source Repositories で Git リポジトリを作成する
タスク 3. Cloud Build でコンテナ イメージを作成する
クローンを作成したコードには、すでに次の Dockerfile が含まれています。
FROM python:3.7-slim
RUN pip install flask
WORKDIR /app
COPY app.py /app/app.py
ENTRYPOINT ["python"]
CMD ["/app/app.py"]
この Dockerfile を使用して、Cloud Build でコンテナ イメージを作成し、Container Registry に保存できます。
- Cloud Shell で次のコマンドを使用して、最新の commit に基づいて Cloud Build ビルドを作成します。
cd ~/hello-cloudbuild-app
COMMIT_ID="$(git rev-parse --short=7 HEAD)"
gcloud builds submit --tag="{{{project_0.default_region | REGION}}}-docker.pkg.dev/${PROJECT_ID}/my-repository/hello-cloudbuild:${COMMIT_ID}" .
このコマンドを実行するとコンテナ イメージが作成され、Cloud Build はログを生成してターミナルにストリーミングします。
-
ビルドが完了したら、Google Cloud コンソールで [Artifact Registry] > [リポジトリ] に移動して、新しいコンテナ イメージが Artifact Registry 内で実際に利用可能になっていることを確認します。
-
my-repository をクリックします。
![[my-repository のイメージ] ページ。hello-cloudbuild リポジトリと Artifact Registry ペインが表示されている。](https://cdn.qwiklabs.com/zjiKFlUIg5VslvBRAv8ZepucD0%2FuhcPGoD4rTDubafA%3D)
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Build でコンテナ イメージを作成する
タスク 4. 継続的インテグレーション(CI)パイプラインを作成する
このタスクでは、小さな単体テストを自動的に実施し、コンテナ イメージを作成して Container Registry に push するように Cloud Build を構成し、Cloud Source Repositories に新しい commit が push されるとこのパイプラインが自動的にトリガーされるようにします。このパイプラインの構成ファイルは cloudbuild.yaml で、すでにコードに含まれています。

- Google Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
- [トリガーを作成] をクリックします。
- [名前] フィールドに「hello-cloudbuild」と入力します。
- [イベント] で [ブランチに push する] を選択します。
- [ソース] で、[リポジトリ] に hello-cloudbuild-app を選択し、[ブランチ] に ^master$ と入力します。
- [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
- [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。
- [サービス アカウント] で、プロジェクト ID で始まるサービス アカウント(@.iam.gserviceaccount.com の形式)を選択します。
- [作成] をクリックします。
![[トリガーの作成] ページ。名前、イベント、ソース、ビルド構成の設定が完了している。](https://cdn.qwiklabs.com/%2BiyOjkDlY4QPEh6G0vyinqor8t10gCqrm1w4xmTUdwU%3D)
トリガーが作成されたら Cloud Shell に戻り、アプリケーション コードを Cloud Source Repositories に push して、Cloud Build で CI パイプラインをトリガーします。
- このトリガーを開始するには次のコマンドを実行します。
cd ~/hello-cloudbuild-app
git push google master
- Google Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
実行中か最近完了したビルドがあることを確認します。
ビルドをクリックすると、その実行を追跡し、ログを確認できます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
継続的インテグレーション(CI)パイプラインを作成する
タスク 5. テスト環境と CD パイプラインを作成する
継続的デリバリー パイプラインの作成にも Cloud Build を使用します。このパイプラインは、commit が __hello-cloudbuild-env__ リポジトリの candidate ブランチに push されるたびに実行され、新しいバージョンのマニフェストを Kubernetes クラスタに適用し、正常に完了したらこのマニフェストを production ブランチにコピーします。このプロセスには次のような特徴があります。
- candidate ブランチはデプロイ試行の履歴です。
- production ブランチは成功したデプロイの履歴です。
- 成功したデプロイと失敗したデプロイは Cloud Build で確認できます。
- Cloud Build で対応するビルドを再実行することで、以前のデプロイにロールバックできます。デプロイの履歴を正確に反映するために、ロールバックしたときも production ブランチが更新されます。
継続的インテグレーション パイプラインを変更して、hello-cloudbuild-env リポジトリの candidate ブランチを更新し、継続的デリバリー パイプラインをトリガーします。
Cloud Build に GKE へのアクセス権を付与する
Kubernetes クラスタにアプリケーションをデプロイするには、Cloud Build に Kubernetes Engine デベロッパーの Identity and Access Management ロールを付与する必要があります。
- Cloud Shell で、次のコマンドを実行します。
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')"
gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/container.developer
hello-cloudbuild-env リポジトリを初期化する
hello-cloudbuild-env リポジトリを 2 つのブランチ(production と candidate)と、デプロイ プロセスを記述した Cloud Build 構成ファイルで初期化する必要があります。
まず、hello-cloudbuild-env リポジトリのクローンを作成し、production ブランチを作成します。このブランチは、まだ空です。
- Cloud Shell で、次のコマンドを実行します。
cd ~
gcloud source repos clone hello-cloudbuild-env
cd ~/hello-cloudbuild-env
git checkout -b production
- hello-cloudbuild-app リポジトリにある cloudbuild-delivery.yaml ファイルをコピーして、変更を commit します。
cd ~/hello-cloudbuild-env
cp ~/hello-cloudbuild-app/cloudbuild-delivery.yaml ~/hello-cloudbuild-env/cloudbuild.yaml
git add .
git commit -m "Create cloudbuild.yaml for deployment"
注: cloudbuild-delivery.yaml ファイルには、Cloud Build で実行されるデプロイ プロセスが記述されています。
次の 2 つの手順があります。
- Cloud Build が GKE クラスタにマニフェストを適用します。
- 正常に完了すると、Cloud Build はマニフェストを production ブランチにコピーします。
- candidate ブランチを作成し、両方のブランチを Cloud Source Repositories で使用できるように push します。
git checkout -b candidate
git push origin production
git push origin candidate
-
hello-cloudbuild-env リポジトリに対する Source Repository 書き込みの IAM ロールを Cloud Build サービス アカウントに付与します。
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} \
--format='get(projectNumber)')"
cat >/tmp/hello-cloudbuild-env-policy.yaml <<EOF
bindings:
- members:
- serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com
role: roles/source.writer
EOF
gcloud source repos set-iam-policy \
hello-cloudbuild-env /tmp/hello-cloudbuild-env-policy.yaml
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Build に Kubernetes Engine デベロッパーと Source Repository 書き込みの IAM ロールを付与する
継続的デリバリー パイプラインのトリガーを作成する
- Google Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
- [トリガーを作成] をクリックします。
- [名前] フィールドに「hello-cloudbuild-deploy」と入力します。
- [イベント] で [ブランチに push する] を選択します。
- [ソース] で、[リポジトリ] に hello-cloudbuild-env を選択し、[ブランチ] に ^candidate$ を選択します。
- [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
- [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。
- [サービス アカウント] で、プロジェクト ID で始まるサービス アカウント(@.iam.gserviceaccount.com の形式)を選択します。
- [作成] をクリックします。
継続的デリバリー パイプラインをトリガーするように継続的インテグレーション パイプラインを変更する
このセクションでは、Kubernetes マニフェストの新しいバージョンを生成して __hello-cloudbuild-env__ リポジトリに push し、継続的デリバリー パイプラインをトリガーする手順を継続的インテグレーション パイプラインに追加します。
-
app リポジトリ用の cloudbuild.yaml ファイルの拡張版をコピーします。
cd ~/hello-cloudbuild-app
cp cloudbuild-trigger-cd.yaml cloudbuild.yaml
cloudbuild-trigger-cd.yaml は、cloudbuild.yaml ファイルの拡張版です。新しい Kubernetes マニフェストを生成し、継続的デリバリー パイプラインをトリガーする手順が追加されています。
注: このパイプラインでは、単純な sed を使用してマニフェスト テンプレートをレンダリングしていますが、実際には kustomize や skaffold などの専用ツールを使用する方がマニフェスト テンプレートのレンダリングをより細かく制御できます。
- 変更を commit して Cloud Source Repositories に push します。
cd ~/hello-cloudbuild-app
git add cloudbuild.yaml
git commit -m "Trigger CD pipeline"
git push google master
これにより、Cloud Build の継続的インテグレーション パイプラインがトリガーされます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
継続的デリバリー パイプラインのトリガーを作成する
タスク 6. Cloud Build パイプラインを確認する
- Google Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
-
hello-cloudbuild-app のトリガーをクリックして、その実行を追跡してログを確認します。
このパイプラインの最後の手順では、新しいマニフェストが hello-cloudbuild-env リポジトリに push されることで継続的デリバリー パイプラインがトリガーされます。
![[ビルド履歴] ページ。hello-cloudbuild-app と、ref、トリガー名、所要時間などの詳細が表示されている。](https://cdn.qwiklabs.com/fhfK%2F6Z72yUrC%2FyHACUJaNnoUMXwt5M9gJcm2BkTodc%3D)
- [ダッシュボード] のメイン画面に戻ります。
-
hello-cloudbuild-env リポジトリでビルドが実行中または最近完了したことを確認します。ビルドをクリックすると、その実行を追跡し、ログを確認できます。

タスク 7. パイプライン全体をテストする
これで、CI / CD パイプライン全体が構成されました。このセクションでは、エンドツーエンドでテストを行います。
-
Google Cloud コンソールで、[Kubernetes Engine] > [Gateways、Services、Ingress] に移動します。
-
上部のメニューで [Services] を選択します。
リストに hello-cloudbuild という名前の単一の Service が含まれています。これは実行された継続的デリバリー ビルドによって作成されたものです。
-
hello-cloudbuild サービスのエンドポイントをクリックします。
「Hello World!」と表示されます。エンドポイントがない場合や、ロードバランサのエラーが発生した場合は、ロードバランサが完全に初期化されるまで数分待つ必要があります。必要に応じて [更新] をクリックしてページを更新します。

- Cloud Shell で、アプリケーションと単体テストの両方で、「Hello World」を「Hello Cloud Build」に置き換えます。
cd ~/hello-cloudbuild-app
sed -i 's/Hello World/Hello Cloud Build/g' app.py
sed -i 's/Hello World/Hello Cloud Build/g' test_app.py
- 変更を commit して Cloud Source Repositories に push します。
git add app.py test_app.py
git commit -m "Hello Cloud Build"
git push google master
- これにより、CI / CD パイプライン全体がトリガーされます。
数分後、ブラウザでアプリケーションを再読み込みします。「Hello Cloud Build!」と表示されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
パイプライン全体をテストする
タスク 8. ロールバックをテストする
このタスクでは、「Hello World!」と表示するアプリケーションのバージョンにロールバックします。
-
Google Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
-
hello-cloudbuild-env リポジトリの [ビルド履歴] の下にある [すべて表示] をクリックします。
-
利用可能なビルドのうち、直近から 2 番目のものをクリックします。
-
[ビルドを再試行] をクリックします。
![[ビルドの詳細] ページ。[ビルドを再試行] ボタンと [URL をコピー] ボタンが表示されている。](https://cdn.qwiklabs.com/g8uPceMqwtC8x2KAGNM2xyCFu%2FYqL9EC7juKhwck2zk%3D)
- ビルドが完了したら、ブラウザでアプリケーションを再読み込みします。
再び「Hello World!」と表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ロールバックをテストする
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。