arrow_back

Cloud Build を使用した Google Kubernetes Engine のパイプライン

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Cloud Build を使用した Google Kubernetes Engine のパイプライン

Lab 1時間 30分 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP1077

Google Cloud セルフペース ラボ

概要

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

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 ビルドを再実行して、以前のバージョンにロールバックする。

GitOps フロー

目標

このラボでは、次のタスクについて学びます。

  • Kubernetes Engine クラスタを作成する
  • Cloud Source Repositories でリポジトリを作成する
  • Cloud Source Repositories から Cloud Build をトリガーする
  • Cloud Build でテストを自動化し、デプロイ可能なコンテナ イメージを公開する
  • Kubernetes Engine クラスタにデプロイされたリソースを Cloud Build で管理する

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

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

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. ラボを初期化する

  1. Cloud Shell で、プロジェクト ID とプロジェクト番号を設定します。これらを変数 PROJECT_IDPROJECT_NUMBER として保存します。
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') export REGION={{{ project_0.default_region }}} gcloud config set compute/region $REGION

次のタスクでは、Google Cloud プロジェクトを使用するための準備を行います。具体的には、必要な API を有効にし、Cloud Shell の Git 構成を初期化して、後ほど使用するサンプルコードをダウンロードします。

  1. 次のコマンドを実行して、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=$REGION
  1. このラボのサンプル アプリケーションをデプロイする GKE クラスタを作成します。
gcloud container clusters create hello-cloudbuild --num-nodes 1 --region $REGION
  1. Git を Cloud Shell で使用したことがない場合は、名前とメールアドレスを使用して Git を構成します。Git はこれらを使用して、Cloud Shell で作成する commit の作成者を識別します(GitHub アカウントがない場合、現在ご利用の情報を入力してください。このラボではアカウントは必要ありません)。
git config --global user.email "you@example.com" git config --global user.name "Your Name"

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 サービスを有効にして Artifact Registry と GKE クラスタを作成する

タスク 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. GitHub からサンプルコードのクローンを作成します。
cd ~ git clone https://github.com/GoogleCloudPlatform/gke-gitops-tutorial-cloudbuild hello-cloudbuild-app
  1. Cloud Source Repositories をリモートとして構成します。
cd ~/hello-cloudbuild-app export REGION={{{project_0.default_region | "REGION"}}} sed -i "s/us-central1/$REGION/g" cloudbuild.yaml sed -i "s/us-central1/$REGION/g" cloudbuild-delivery.yaml sed -i "s/us-central1/$REGION/g" cloudbuild-trigger-cd.yaml sed -i "s/us-central1/$REGION/g" kubernetes.yaml.tpl PROJECT_ID=$(gcloud config get-value project) 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)

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 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 でコンテナ イメージを作成し、Artifact Registry に保存できます。

  1. Cloud Shell で次のコマンドを使用して、最新の commit に基づいて Cloud Build ビルドを作成します。
cd ~/hello-cloudbuild-app COMMIT_ID="$(git rev-parse --short=7 HEAD)" gcloud builds submit --tag="${REGION}-docker.pkg.dev/${PROJECT_ID}/my-repository/hello-cloudbuild:${COMMIT_ID}" .

このコマンドを実行すると、Cloud Build はコンテナ イメージの作成によって生成されたログをターミナルにストリーミングします。

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

Artifact Registry

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

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

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

アーキテクチャ

  1. Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
  2. [トリガーを作成] をクリックします。
  3. [名前] フィールドに「hello-cloudbuild」と入力します。
  4. [イベント] で [ブランチに push する] を選択します。
  5. [ソース] で、[リポジトリ] として hello-cloudbuild-app を選択し、[ブランチ] として .* (any branch) を選択します。
  6. [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
  7. [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。
  8. [作成] をクリックします。

トリガーを作成する

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

  1. このトリガーを開始するには次のコマンドを実行します。
cd ~/hello-cloudbuild-app git add . git commit -m "Type Any Commit Message here" git push google master
  1. Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。

  2. ビルドが実行中または最近終了したことを確認します。ビルドをクリックすると、その実行を追跡し、ログを確認できます。

ダッシュボード

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 継続的インテグレーション(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 ロールが必要です。

  1. 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 リポジトリを 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

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

  1. Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
  2. [トリガーを作成] をクリックします。
  3. [名前] フィールドに「hello-cloudbuild-deploy」と入力します。
  4. [イベント] で [ブランチに push する] を選択します。
  5. [ソース] で、[リポジトリ] として hello-cloudbuild-env を選択し、[ブランチ] として ^candidate$ を選択します。
  6. [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
  7. [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「cloudbuild.yaml」と入力します。
  8. [作成] をクリックします。

トリガーを作成する

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

次に、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 の継続的インテグレーション パイプラインがトリガーされます。

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

タスク 6. Cloud Build パイプラインを確認する

  1. Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
  2. トリガー hello-cloudbuild-app をクリックして実行し、ログを確認します。このパイプラインの最後の手順では、新しいマニフェストが hello-cloudbuild-env リポジトリに push され、これにより継続的デリバリー パイプラインがトリガーされます。

ビルド履歴

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

Cloud Build ダッシュボード

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

これで、CI / CD パイプライン全体が構成されました。エンドツーエンドでテストします。

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

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

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

アプリ 1 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!」と表示されます。

アプリ 2 Hello Cloud Build!

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

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

  1. Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
  2. hello-cloudbuild-env リポジトリの [ビルド履歴] の下にある [すべて表示] をクリックします。
  3. 利用可能な 2 番目に新しいビルドをクリックします。
  4. [再ビルド] をクリックします。

ロールバック成功画面

ビルドが完了したら、ブラウザでアプリケーションを再読み込みします。再び「Hello World!」と表示されます。

アプリ 1 Hello World!

お疲れさまでした

Cloud Build を使用して、Google Cloud の GKE で継続的インテグレーション パイプラインの作成とロールバックを行ってみましょう。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 1 月 26 日

ラボの最終テスト日: 2024 年 1 月 19 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。