チェックポイント
Enable services, create an artifact registry and the GKE cluster
/ 20
Create the Git repositories
/ 20
Create the container image with Cloud Build
/ 20
Create the Continuous Integration (CI) Pipeline
/ 20
Create the Test Environment and CD Pipeline
/ 20
Cloud Build を使用した Google Kubernetes Engine のパイプライン
GSP1077
概要
このラボでは、commit されたコードからコンテナ イメージを自動的にビルドし、そのイメージを Artifact 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 ビルドを再実行して、以前のバージョンにロールバックする。
目標
このラボでは、次のタスクについて学びます。
- 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 コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. ラボを初期化する
- Cloud Shell で、プロジェクト ID とプロジェクト番号を設定します。これらを変数
PROJECT_ID
とPROJECT_NUMBER
として保存します。
次のタスクでは、Google Cloud プロジェクトを使用するための準備を行います。具体的には、必要な API を有効にし、Cloud Shell の Git 構成を初期化して、後ほど使用するサンプルコードをダウンロードします。
- 次のコマンドを実行して、GKE、Cloud Build、Cloud Source Repositories、Container Analysis の API を有効にします。
- my-repository という名前の Artifact Registry Docker リポジトリを
リージョンに作成します。このリポジトリにコンテナ イメージを保存します。
- このラボのサンプル アプリケーションをデプロイする GKE クラスタを作成します。
- Git を Cloud Shell で使用したことがない場合は、名前とメールアドレスを使用して Git を構成します。Git はこれらを使用して、Cloud Shell で作成する commit の作成者を識別します(GitHub アカウントがない場合、現在ご利用の情報を入力してください。このラボではアカウントは必要ありません)。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 2. Cloud Source Repositories で Git リポジトリを作成する
このタスクでは、2 つの Git リポジトリ(hello-cloudbuild-app と hello-cloudbuild-env)を作成し、いくつかのサンプルコードを使用して hello-cloudbuild-app を初期化します。
- Cloud Shell で次のコマンドを実行して、2 つの Git リポジトリを作成します。
- GitHub からサンプルコードのクローンを作成します。
- Cloud Source Repositories をリモートとして構成します。
クローンを作成したコードには、単純な「Hello World」アプリケーションが含まれています。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 3. Cloud Build でコンテナ イメージを作成する
クローンを作成したコードには、すでに次の Dockerfile が含まれています。
この Dockerfile を使用して、Cloud Build でコンテナ イメージを作成し、Artifact Registry に保存できます。
- Cloud Shell で次のコマンドを使用して、最新の commit に基づいて Cloud Build ビルドを作成します。
このコマンドを実行すると、Cloud Build はコンテナ イメージの作成によって生成されたログをターミナルにストリーミングします。
- ビルドが完了したら、Cloud コンソールで [Artifact Registry] > [リポジトリ] に移動して、新しいコンテナ イメージが Artifact Registry 内で実際に利用可能になっていることを確認します。my-repository をクリックします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 4. 継続的インテグレーション(CI)パイプラインを作成する
このタスクでは、小規模な単体テストを自動的に実施し、コンテナ イメージを構築して Artifact Registry に push するように Cloud Build を構成します。Cloud Source Repositories に新しい commit を push すると、このパイプラインが自動的にトリガーされます。すでにコードに含まれている cloudbuild.yaml ファイルがこのパイプラインの構成です。
- Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
- [トリガーを作成] をクリックします。
- [名前] フィールドに「
hello-cloudbuild
」と入力します。 - [イベント] で [ブランチに push する] を選択します。
- [ソース] で、[リポジトリ] として hello-cloudbuild-app を選択し、[ブランチ] として
.* (any branch)
を選択します。 - [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
- [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「
cloudbuild.yaml
」と入力します。 - [作成] をクリックします。
トリガーが作成されたら Cloud Shell に戻り、アプリケーション コードを Cloud Source Repositories に push して、Cloud Build で CI パイプラインをトリガーします。
- このトリガーを開始するには次のコマンドを実行します。
-
Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
-
ビルドが実行中または最近終了したことを確認します。ビルドをクリックすると、その実行を追跡し、ログを確認できます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 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 で、次のコマンドを実行します。
hello-cloudbuild-env リポジトリを 2 つのブランチ(production と candidate)と、デプロイ プロセスを記述した Cloud Build 構成ファイルで初期化する必要があります。
まず、hello-cloudbuild-env リポジトリのクローンを作成し、production ブランチを作成します。このブランチは、まだ空です。
- Cloud Shell で、次のコマンドを実行します。
- hello-cloudbuild-app リポジトリにある cloudbuild-delivery.yaml ファイルをコピーして、変更を commit します。
cloudbuild-delivery.yaml
ファイルには、Cloud Build で実行されるデプロイ プロセスが記述されています。次の 2 つの手順があります。
- Cloud Build が GKE クラスタにマニフェストを適用します。
- 正常に終了すると、Cloud Build はマニフェストを production ブランチにコピーします。
- candidate ブランチを作成し、両方のブランチを Cloud Source Repositories で使用できるように push します。
- hello-cloudbuild-env リポジトリに対する Source Repository 書き込みの IAM ロールを Cloud Build サービス アカウントに付与します。
継続的デリバリー パイプラインのトリガーを作成する
- Cloud コンソールで、[Cloud Build] > [トリガー] に移動します。
- [トリガーを作成] をクリックします。
- [名前] フィールドに「
hello-cloudbuild-deploy
」と入力します。 - [イベント] で [ブランチに push する] を選択します。
- [ソース] で、[リポジトリ] として hello-cloudbuild-env を選択し、[ブランチ] として
^candidate$
を選択します。 - [ビルド構成] で [Cloud Build 構成ファイル] を選択します。
- [Cloud Build 構成ファイルの場所] フィールドで、/ の後に「
cloudbuild.yaml
」と入力します。 - [作成] をクリックします。
継続的デリバリー パイプラインをトリガーするように継続的インテグレーション パイプラインを変更する
次に、Kubernetes マニフェストの新しいバージョンを生成して hello-cloudbuild-env リポジトリに push し、継続的デリバリー パイプラインをトリガーする手順を継続的インテグレーション パイプラインに追加します。
- app リポジトリ用の cloudbuild.yaml ファイルの拡張版をコピーします。
cloudbuild-trigger-cd.yaml は、cloudbuild.yaml ファイルの拡張版です。新しい Kubernetes マニフェストを生成し、継続的デリバリー パイプラインをトリガーする手順が追加されています。
sed
を使用して、マニフェスト テンプレートをレンダリングしています。現実には、kustomize や skaffold などの専用ツールを使用した方がメリットを得られます。これにより、マニフェスト テンプレートのレンダリングをさらに制御できます。
- 変更を commit して Cloud Source Repositories に push します。
これにより、Cloud Build の継続的インテグレーション パイプラインがトリガーされます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 6. Cloud Build パイプラインを確認する
- Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
- トリガー hello-cloudbuild-app をクリックして実行し、ログを確認します。このパイプラインの最後の手順では、新しいマニフェストが hello-cloudbuild-env リポジトリに push され、これにより継続的デリバリー パイプラインがトリガーされます。
- [ダッシュボード] のメイン画面に戻ります。
- hello-cloudbuild-env リポジトリでビルドが実行中または最近終了したことを確認します。ビルドをクリックすると、その実行を追跡し、ログを確認できます。
タスク 7. パイプライン全体をテストする
これで、CI / CD パイプライン全体が構成されました。エンドツーエンドでテストします。
- Cloud コンソールで、[Kubernetes Engine] > [Gateways、Services、Ingress] に移動します。
リストに hello-cloudbuild という名前の単一の Service が含まれています。これは実行された継続的デリバリー ビルドによって作成されたものです。
- hello-cloudbuild Service のエンドポイントをクリックします。「Hello World!」と表示されます。エンドポイントがない場合や、ロードバランサのエラーが発生した場合は、ロードバランサが完全に初期化されるまで数分待つ必要があります。必要に応じて [更新] をクリックしてページを更新します。
- Cloud Shell で、アプリケーションと単体テストの両方で「Hello World」を「Hello Cloud Build」に置き換えます。
- 変更を commit して Cloud Source Repositories に push します。
- これにより、CI / CD パイプライン全体がトリガーされます。
数分後、ブラウザでアプリケーションを再読み込みします。「Hello Cloud Build!」と表示されます。
タスク 8. ロールバックをテストする
このタスクでは、「Hello World!」と表示するアプリケーションのバージョンにロールバックします。
- Cloud コンソールで、[Cloud Build] > [ダッシュボード] に移動します。
- hello-cloudbuild-env リポジトリの [ビルド履歴] の下にある [すべて表示] をクリックします。
- 利用可能な 2 番目に新しいビルドをクリックします。
- [再ビルド] をクリックします。
ビルドが完了したら、ブラウザでアプリケーションを再読み込みします。再び「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 の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。