ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

Cloud Build を使用した Google Kubernetes Engine による CI / CD

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

概要

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

Ci / CD パイプライン図。アプリケーションの最初のソースコードへの push から始まり、Container Registry で終了する。

このラボでは 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 プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

最初のログイン手順を完了すると、プロジェクト ダッシュボードが表示されます。

プロジェクト ダッシュボード。API、リソース、お支払い、トレースなどの情報専用のタイルが表示されている。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

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

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 構成を初期化して、後ほど使用するサンプル コードをダウンロードします。

  1. 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
  1. my-repository という名前の Artifact Registry Docker リポジトリを リージョンに作成します。このリポジトリにコンテナ イメージを保存します。
gcloud artifacts repositories create my-repository \ --repository-format=docker \ --location={{{project_0.default_region | REGION}}}
  1. Cloud Shell で、このラボのサンプル アプリケーションをデプロイするために使用する GKE クラスタを作成します。
gcloud container clusters create hello-cloudbuild \ --num-nodes 1 --region {{{project_0.default_region | REGION}}}
  1. 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-apphello-cloudbuild-env)を作成し、サンプルコードを使用して hello-cloudbuild-app を初期化します。

  1. Cloud Shell で、2 つの Git リポジトリを作成します。
gcloud source repos create hello-cloudbuild-app gcloud source repos create hello-cloudbuild-env
  1. hello-cloudbuild-app リポジトリのクローンを作成します。
PROJECT_ID=$(gcloud config get-value project) gcloud source repos clone hello-cloudbuild-app --project=$PROJECT_ID
  1. 次のコマンドを実行して、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
  1. 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 に保存できます。

  1. 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 はログを生成してターミナルにストリーミングします。

  1. ビルドが完了したら、Google Cloud コンソールで [Artifact Registry] > [リポジトリ] に移動して、新しいコンテナ イメージが Artifact Registry 内で実際に利用可能になっていることを確認します。

  2. my-repository をクリックします。

[my-repository のイメージ] ページ。hello-cloudbuild リポジトリと Artifact Registry ペインが表示されている。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Build でコンテナ イメージを作成する

タスク 4. 継続的インテグレーション(CI)パイプラインを作成する

このタスクでは、小さな単体テストを自動的に実施し、コンテナ イメージを作成して Container Registry に push するように Cloud Build を構成し、Cloud Source Repositories に新しい commit が push されるとこのパイプラインが自動的にトリガーされるようにします。このパイプラインの構成ファイルは cloudbuild.yaml で、すでにコードに含まれています。

デベロッパーから Container Registry に進むコンテナ イメージ パイプライン。

  1. Google Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
  2. [トリガーを作成] をクリックします。
  3. [名前] フィールドに「hello-cloudbuild」と入力します。
  4. [イベント] で [ブランチに push する] を選択します。
  5. [ソース] で、[リポジトリ] に hello-cloudbuild-app を選択し、[ブランチ] に ^master$ と入力します。
  6. [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
  7. [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。
  8. [サービス アカウント] で、プロジェクト ID で始まるサービス アカウント(@.iam.gserviceaccount.com の形式)を選択します。
  9. [作成] をクリックします。

[トリガーの作成] ページ。名前、イベント、ソース、ビルド構成の設定が完了している。

トリガーが作成されたら Cloud Shell に戻り、アプリケーション コードを Cloud Source Repositories に push して、Cloud Build で CI パイプラインをトリガーします。

  1. このトリガーを開始するには次のコマンドを実行します。
cd ~/hello-cloudbuild-app git push google master
  1. 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 ブランチを作成します。このブランチは、まだ空です。

  1. Cloud Shell で、次のコマンドを実行します。
cd ~ gcloud source repos clone hello-cloudbuild-env cd ~/hello-cloudbuild-env git checkout -b production
  1. 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 ブランチにコピーします。
  1. candidate ブランチを作成し、両方のブランチを Cloud Source Repositories で使用できるように push します。
git checkout -b candidate git push origin production git push origin candidate
  1. 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 ロールを付与する

継続的デリバリー パイプラインのトリガーを作成する

  1. Google Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
  2. [トリガーを作成] をクリックします。
  3. [名前] フィールドに「hello-cloudbuild-deploy」と入力します。
  4. [イベント] で [ブランチに push する] を選択します。
  5. [ソース] で、[リポジトリ] に hello-cloudbuild-env を選択し、[ブランチ] に ^candidate$ を選択します。
  6. [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
  7. [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。
  8. [サービス アカウント] で、プロジェクト ID で始まるサービス アカウント(@.iam.gserviceaccount.com の形式)を選択します。
  9. [作成] をクリックします。

継続的デリバリー パイプラインをトリガーするように継続的インテグレーション パイプラインを変更する

このセクションでは、Kubernetes マニフェストの新しいバージョンを生成して __hello-cloudbuild-env__ リポジトリに push し、継続的デリバリー パイプラインをトリガーする手順を継続的インテグレーション パイプラインに追加します。

  1. app リポジトリ用の cloudbuild.yaml ファイルの拡張版をコピーします。
cd ~/hello-cloudbuild-app cp cloudbuild-trigger-cd.yaml cloudbuild.yaml

cloudbuild-trigger-cd.yaml は、cloudbuild.yaml ファイルの拡張版です。新しい Kubernetes マニフェストを生成し、継続的デリバリー パイプラインをトリガーする手順が追加されています。

注: このパイプラインでは、単純な sed を使用してマニフェスト テンプレートをレンダリングしていますが、実際には kustomize や skaffold などの専用ツールを使用する方がマニフェスト テンプレートのレンダリングをより細かく制御できます。
  1. 変更を 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 パイプラインを確認する

  1. Google Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
  2. hello-cloudbuild-app のトリガーをクリックして、その実行を追跡してログを確認します。

このパイプラインの最後の手順では、新しいマニフェストが hello-cloudbuild-env リポジトリに push されることで継続的デリバリー パイプラインがトリガーされます。

[ビルド履歴] ページ。hello-cloudbuild-app と、ref、トリガー名、所要時間などの詳細が表示されている。

  1. [ダッシュボード] のメイン画面に戻ります。
  2. hello-cloudbuild-env リポジトリでビルドが実行中または最近完了したことを確認します。ビルドをクリックすると、その実行を追跡し、ログを確認できます。

プロジェクト ダッシュボード。hello-cloudbuild-env リポジトリのステータス メッセージ「成功」が表示されている。

タスク 7. パイプライン全体をテストする

これで、CI / CD パイプライン全体が構成されました。このセクションでは、エンドツーエンドでテストを行います。

  1. Google Cloud コンソールで、[Kubernetes Engine] > [Gateways、Services、Ingress] に移動します。

  2. 上部のメニューで [Services] を選択します。

リストに hello-cloudbuild という名前の単一の Service が含まれています。これは実行された継続的デリバリー ビルドによって作成されたものです。

  1. hello-cloudbuild サービスのエンドポイントをクリックします。

「Hello World!」と表示されます。エンドポイントがない場合や、ロードバランサのエラーが発生した場合は、ロードバランサが完全に初期化されるまで数分待つ必要があります。必要に応じて [更新] をクリックしてページを更新します。

ブラウザに「Hello World!」と表示されている。

  1. 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
  1. 変更を commit して Cloud Source Repositories に push します。
git add app.py test_app.py git commit -m "Hello Cloud Build" git push google master
  1. これにより、CI / CD パイプライン全体がトリガーされます。

数分後、ブラウザでアプリケーションを再読み込みします。「Hello Cloud Build!」と表示されます。

ブラウザに「Hello Cloud Build!」と表示される。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 パイプライン全体をテストする

タスク 8. ロールバックをテストする

このタスクでは、「Hello World!」と表示するアプリケーションのバージョンにロールバックします。

  1. Google Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。

  2. hello-cloudbuild-env リポジトリの [ビルド履歴] の下にある [すべて表示] をクリックします。

  3. 利用可能なビルドのうち、直近から 2 番目のものをクリックします。

  4. [ビルドを再試行] をクリックします。

[ビルドの詳細] ページ。[ビルドを再試行] ボタンと [URL をコピー] ボタンが表示されている。

  1. ビルドが完了したら、ブラウザでアプリケーションを再読み込みします。

再び「Hello World!」と表示されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ロールバックをテストする

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。