始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Create a Kubernetes cluster
/ 20
Configure and Install Jenkins
/ 20
Create the production and canary deployments
/ 30
Build for the 'new-feature' branch
/ 10
Deploying a canary release
/ 10
Deploying to production
/ 10
このラボでは、Kubernetes Engine で Jenkins を使用して継続的デリバリー パイプラインを設定する方法について学びます。Jenkins とは、共有リポジトリに頻繁にコードを統合するデベロッパーによく利用されているオートメーション サーバーです。このラボで構築するソリューションは、次の図のようになります。
Kubernetes で Jenkins を実行する方法について詳しくは、Cloud アーキテクチャ センターの Kubernetes Engine での Jenkins をご覧ください。
このラボでは、次のタスクを行って Kubernetes で Jenkins を実行する方法について学習します。
このラボは上級者向けです。受講する前に、少なくともシェル プログラミング、Kubernetes、Jenkins の基礎を理解しておく必要があります。こうした基礎は、以下のラボで効率的に習得できます。
準備ができたら下にスクロールして、Kubernetes、Jenkins、継続的デリバリーについて詳しく学んでいきましょう。
Kubernetes Engine は、高度なクラスタ マネージャーでありコンテナのオーケストレーション システムである Kubernetes の Google Cloud のホスト バージョンです。Kubernetes はオープンソースのプロジェクトで、ノートパソコンや可用性の高いマルチノード クラスタ、仮想マシンからベアメタルまで、さまざまな環境で利用できます。前述のように、Kubernetes アプリはコンテナ上に構築される、実行に必要なすべての依存関係とライブラリがバンドルされた軽量アプリケーションです。この基本的な構造により、Kubernetes アプリケーションの高可用性、安全性、迅速なデプロイといった、クラウド デベロッパーが理想とするフレームワークが実現します。
Jenkins は、ビルド、テスト、デプロイ用パイプラインの柔軟なオーケストレーションを可能にするオープンソースのオートメーション サーバーです。Jenkins を使用すれば、継続的デリバリーに起因するオーバーヘッドの問題を気に掛けることなく、プロジェクトに対して迅速に反復処理を行うことができます。
継続的デリバリー(CD)パイプラインを設定する必要がある場合、Kubernetes Engine での Jenkins のデプロイには、標準の VM ベースのデプロイよりも大きなメリットがあります。
ビルドプロセスでコンテナを使用すると、1 つの仮想ホストが複数のオペレーティング システムでジョブを実行できます。Kubernetes Engine が提供するエフェメラル ビルド エグゼキュータは、ビルドがアクティブに実行されている場合にのみ使用されるため、バッチ処理ジョブなど、クラスタ内の他のタスク用にリソースを確保できます。エフェメラル ビルド エグゼキュータのもう 1 つの利点はスピードで、わずか数秒で起動します。
また、Kubernetes Engine には Google のグローバル ロードバランサが組み込まれており、これを使用してインスタンスへのウェブ トラフィックのルーティングを自動化することもできます。ロードバランサは SSL 終端処理を行い、Google のバックボーン ネットワーク(ユーザーのウェブフロントに結合)で構成されたグローバル IP アドレスを利用します。このロードバランサにより、ユーザーは常に最短パスでアプリケーション インスタンスに接続されます。
Kubernetes と Jenkins、および CD パイプラインにおける両者の関係についてある程度理解したところで、今度は実際に構築してみましょう。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] ペインでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] ペインでもパスワードを確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
ウィンドウで次の操作を行います。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
出力:
出力:
gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
このタスクでは、このラボのソースコードをダウンロードします。
Kubernetes クラスタを作成し、Jenkins が GitHub リポジトリと Google Container Registry にアクセスできるようにします。
この手順の完了には数分かかることがあります。追加のスコープで、Jenkins が GitHub リポジトリと Google Container Registry にアクセスできるようになります。
[進行状況を確認] をクリックして、実行したタスクを確認します。Kubernetes クラスタが正常に作成されている場合は、評価スコアが表示されます。
Helm は、Kubernetes アプリケーションの構成とデプロイを容易にするパッケージ管理システムです。Jenkins をインストールしたら、CI / CD パイプラインを設定できます。
このタスクでは、Helm を使用してチャート リポジトリから Jenkins をインストールします。
Jenkins のインストール時に、設定に必要な値をテンプレートとして提供する values ファイルを使用できます。
カスタムの values ファイルを使用して Kubernetes クラウドを自動的に構成し、以下の必要なプラグインを追加します。
これにより、Jenkins がクラスタと Google Cloud プロジェクトに接続できるようになります。
このコマンドは完了までに数分かかる場合があります。
[進行状況を確認] をクリックして、実行したタスクを確認します。Jenkins チャートが正常に構成されている場合は、評価スコアが表示されます。
Running 状態になり、コンテナが READY 状態になっていることを確認します。出力例:
次の出力が表示されます。
出力例:
Jenkins マスターがリクエストしたときに必要に応じて自動的にビルダーノードが起動するように、Kubernetes プラグインを使用しています。処理が完了すると、ビルダーノードは自動的に終了し、リソースがクラスタのリソースプールに戻されます。
このサービスでは、selector に一致するすべての Pod のポート 8080 と 50000 が公開されることに注意してください。これにより、Kubernetes クラスタ内の Jenkins ウェブ UI ポートとビルダー / エージェント登録ポートが公開されます。また、jenkins-ui サービスは ClusterIP を使用して公開されるため、クラスタ外からはアクセスできません。
管理者パスワードを取得して、Jenkins インターフェースにログインします。
Jenkins ユーザー インターフェースを表示するには、Cloud Shell のアクションバーでウェブでプレビュー アイコン() > [ポート 8080 でプレビュー] の順にクリックします。
ユーザー名「admin」と自動生成されたパスワードでログインします。
これで、Kubernetes クラスタに Jenkins が設定されました。次のセクションでは、自動化した CI / CD パイプラインを Jenkins で実行します。
このタスクでは、継続的デプロイ パイプラインにサンプル アプリケーション gceme をデプロイします。このアプリケーションは Go 言語で作成され、リポジトリの sample-app ディレクトリに保存されます。Compute Engine インスタンスで gceme バイナリを実行すると、アプリの情報カードにインスタンスのメタデータが表示されます。
2 つのオペレーション モードに対応するこのアプリケーションは、マイクロサービスの挙動を模倣します。
アプリケーションを以下の 2 つの異なる環境にデプロイします。
kubectl apply コマンドを使用して、本番デプロイメント、カナリア デプロイメント、サービスを作成します。[進行状況を確認] をクリックして、実行したタスクを確認します。デプロイメントが正常に作成されている場合は、評価スコアが表示されます。
デフォルトでは、フロントエンドのレプリカが 1 つだけデプロイされます。kubectl scale コマンドを使用して、少なくとも 4 つのレプリカが常時実行されるようにします。
出力例:
外部 IP をブラウザに貼り付けると、以下のような情報カードが表示されます。
ブラウザでフロントエンドの外部 IP アドレスを開き、両方のサービスが正常に動作していることを確認します。
次のコマンドを実行して、サービスのバージョンを確認します(「1.0.0」と表示されるはずです)。
これで、サンプル アプリケーションが正常にデプロイされました。次に、変更を継続的かつ確実にデプロイするためのパイプラインを設定します。
このタスクでは、次の手順を実行して Jenkins パイプラインを作成します。
gceme サンプルアプリのコピーを作成して、GitHub リポジトリに push します。Cloud Shell で次のコマンドを実行して、Git と GitHub を構成します。
ログインに成功すると、Cloud Shell の出力に GitHub のユーザー名が表示されます。
表示される警告は無視してください。このリポジトリの使用料を請求されることはありません。
Jenkins がコード リポジトリにアクセスできるように認証情報を構成します。Jenkins はクラスタのサービス アカウント認証情報を使用して、GitHub リポジトリからコードをダウンロードします。
Jenkins のユーザー インターフェースで、左側のナビゲーションにある [Manage Jenkins](Jenkins の管理)をクリックし、[Security](セキュリティ)> [Credentials](認証情報) をクリックします。
[System](システム)をクリックします。
[Global credentials (unrestricted)](グローバル認証情報(制限なし))をクリックします。
右上にある [Add Credentials](認証情報を追加)をクリックします。
[Kind](種類)プルダウンから [Google Service Account from metadata](メタデータからの Google サービス アカウント)を選択します。
[ID] フィールドにプロジェクト ID を入力し、[Create](作成)をクリックします。
これでグローバル認証情報が追加されました。
http://cd-jenkins:8080
cd-jenkins-agent:50000
SSH 認証鍵を使用して GitHub 非公開リポジトリで Jenkins を認証する手順は次のとおりです。
a. SSH 認証鍵を生成する
b. 公開鍵を GitHub に追加する
SSH 認証鍵を生成したら、Jenkins がリポジトリにアクセスできるように公開鍵を GitHub に追加する必要があります。
GitHub アカウントに移動します。GitHub プロフィールをクリックし、[Settings](設定)に移動します。
サイドメニューで [SSH and GPG keys](SSH 鍵と GPG 鍵)を選択します。
[New SSH key](新しい SSH 認証鍵)をクリックします。
タイトルとして「SSH_KEY_LAB」を入力します。
パス(~/continuous-deployment-on-kubernetes/sample-app/id_github.pub)からダウンロードした公開鍵(id_github.pub)の内容を [Key](キー)フィールドに貼り付けます。[Title](タイトル)フィールドにわかりやすい名前を追加することもできます。
[Add SSH key](SSH 認証鍵を追加)をクリックします。
c. SSH 認証鍵を使用するように Jenkins を構成する
Jenkins に移動し、メイン ダッシュボードから [Manage Jenkins](Jenkins の管理)を選択します。
[Credentials](認証情報)オプションを選択します。
[Stores scoped to Jenkins](Jenkins にスコープ設定されたストア)で [System](システム)をクリックします。
[Global credentials (unrestricted)](グローバル認証情報(制限なし))をクリックします。
[Add Credentials](認証情報を追加)をクリックします。
[Kind](種類)プルダウンで、[SSH Username with private key](SSH ユーザー名と秘密鍵)を選択します。
ID に「
[Username](ユーザー名)に「GitHub のユーザー名」を入力します。
秘密鍵に [Enter directly](直接入力)を選択し、[Add](追加)をクリックします。id_github ファイル(~/continuous-deployment-on-kubernetes/sample-app/id_github からダウンロード)の内容を貼り付けます。
[Create](作成)をクリックします。
d. 公開 SSH 認証鍵を既知のホストに追加する
Cloud Shell で known_hosts.github という名前のファイルを作成し、このファイルに公開 SSH 認証鍵を追加します。
e. 既知のホストキーを構成する
左側のパネルで [Dashboard](ダッシュボード)> [Manage Jenkins](Jenkins の管理)の順にクリックします。
[Security](セキュリティ)で、[Security](セキュリティ)をクリックします。
[Host Key Verification Strategy](ホストキーの検証の戦略)の [Git Host Key Verification Configuration](Git ホストキーの検証の構成)で、プルダウンから [Manually provided keys](手動で指定されたキー)を選択します。
known hosts.github ファイルの内容を [Approved Host Keys](承認済されたホストキー)に貼り付けます。
[Save](保存)をクリックします。
Jenkins のユーザー インターフェースに移動し、次の手順でパイプライン ジョブを構成します。
左側のパネルで [Dashboard](ダッシュボード)> [New Item](新しいアイテム)をクリックします。
プロジェクトに「sample-app」という名前を付けて [Multibranch Pipeline](マルチブランチ パイプライン)オプションを選択し、[OK] をクリックします。
次のページの [Branch Sources](ブランチソース)のセクションで、[Add Source](ソースの追加)プルダウンから [Git] を選択します。
sample-app リポジトリの HTTPS クローン URL を [Project Repository](プロジェクト リポジトリ)フィールドの下に貼り付けます。${GITHUB_USERNAME} はお使いの GitHub ユーザー名に置き換えます。
[Credentials](認証情報)メニュー オプションで GitHub 認証情報の名前を選択します。
[Scan Multibranch Pipeline Triggers](スキャン マルチブランチ パイプライン トリガー)セクションの [Periodically if not otherwise run](実行されない場合は定期的に実行)をオンにして、[Interval](間隔)の値を [1 minute](1 分)に設定します。
他のオプションはすべてデフォルトのままにして、[Save](保存)をクリックします。
以上の手順が完了すると、Branch indexing という名前のジョブが実行されます。このメタジョブはリポジトリのブランチを認識し、既存のブランチで変更が行われていないことを確認します。左上の sample-app をクリックすると、master ジョブが表示されます。
これで、Jenkins パイプラインの作成が完了しました。次に、継続的インテグレーションのための開発環境を作成します。
開発ブランチは、デベロッパーがコードの変更を公開サイトに統合する前にテストを行うための一連の環境です。これは実際の環境をスケールダウンしたものですが、ライブ環境と同じ方法でデプロイする必要があります。
機能ブランチから開発環境を作成する場合は、ブランチを Git サーバーに push して、Jenkins で環境をデプロイできます。
パイプラインを定義する Jenkinsfile は Jenkins Pipeline Groovy 構文で記述されます。Jenkinsfile を使用すると、ビルド パイプライン全体を 1 つのファイルで表し、ソースコードと一緒に公開できます。パイプラインは並列化などの強力な機能をサポートしていますが、ユーザーによる承認が必要です。
パイプラインを想定どおりに機能させるには、Jenkinsfile ファイルを変更してプロジェクト ID を設定する必要があります。
vi などのターミナル エディタで Jenkinsfile を開きます。REPLACE_WITH_YOUR_PROJECT_ID 値を実際の PROJECT_ID に置き換えます(PROJECT_ID は、ラボの [接続の詳細] セクションにあるご自分のプロジェクト ID です。また、gcloud config get-value project を実行して確認することもできます)。
CLUSTER_ZONE の値を gcloud config get compute/zone を実行します。
Jenkinsfile ファイルを保存します(vi では Esc キーを押し、以下のコマンドを入力します)。アプリケーションの変更を実施するには、gceme カードを青からオレンジに変更します。
html.go: を開きます。<div class="card blue"> の 2 つのインスタンスを変更します。html.go ファイルを保存します(Esc キーを押し、以下のコマンドを入力します)。main.go: を開きます。以下のように更新します。
このタスクでは、開発環境をデプロイします。
これにより、開発環境のビルドが開始されます。
変更が Git リポジトリに push されたら、Jenkins のユーザー インターフェースに移動し、new-feature ブランチのビルドが開始されていることを確認します。変更が反映されるまでに最長で 1 分ほどかかります。
kubectl --namespace=new-feature apply...」メッセージを確認します。これで、new-feature ブランチがクラスタにデプロイされました。Build Executor に何も表示されなくても問題はありません。Jenkins ホームページ > sample-app に移動して、new-feature パイプラインが作成されていることを確認できます。
localhost にリクエストを送信して kubectl プロキシからサービスに転送させ、アプリケーションがアクセス可能であることを確認します。現在実行中のバージョンである 2.0.0 が返されます。
次のようなエラーが表示された場合:
curl コマンドを試してください。以下の出力が表示されたら次に進みます。これで、開発環境の設定が完了しました。次に、前のモジュールで学んだことを踏まえ、カナリア リリースをデプロイして新しい機能をテストします。
[進行状況を確認] をクリックして、実行したタスクを確認します。new-feature ブランチのビルドが正常に開始された場合は、評価スコアが表示されます。
new-feature ブランチをビルドする
開発環境でアプリが最新のコードを実行することが確認できたので、今度はそのコードをカナリア環境にデプロイしてみましょう。
2.0.0 が返されます。これで、カナリア リリースのデプロイが完了しました。次に、新しいバージョンを本番環境にデプロイします。
[進行状況を確認] をクリックして、実行したタスクを確認します。カナリア リリースが正常にデプロイされている場合は、評価スコアが表示されます。
カナリア リリースが成功し、お客様からも苦情が寄せられていないと想定して、本番環境へのデプロイを開始します。
マスター パイプラインが開始されたことが Jenkins に表示されます。
[進行状況を確認] をクリックして、実行したタスクを確認します。マスター パイプラインが正常に開始されている場合は、評価スコアが表示されます。
1.0.0 のインスタンスが表示される場合は、上記のコマンドを再度実行してください。このコマンドを停止するには、Ctrl+C キーを押します。出力例:
gceme アプリケーションの情報カードが表示されるサイトに移動することもできます。カードの色は青からオレンジに変わっています。
出力例:
今回のラボで学習した内容の理解を深めていただくため、以下の多肢選択式問題を用意しました。正解を目指して頑張ってください。
ラボを完了する
本番環境にアプリケーションが正常にデプロイされました。
このハンズオンラボでは、Kubernetes Engine で Jenkins を使ってデプロイすることで、継続的デリバリー パイプラインと継続的デプロイ パイプラインを有効にしました。Kubernetes Engine に重要な DevOps ツールをデプロイし、本番環境用に構成することもできました。さらに、kubectl コマンドライン ツールを使用して YAML ファイルのデプロイ構成を処理し、開発プロセスとデプロイ プロセス用に Jenkins パイプラインを設定する方法について学びました。今後は、これらのツールを実際の DevOps 環境で自信を持って活用していただけるでしょう。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 6 月 10 日
ラボの最終テスト日: 2025 年 6 月 10 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください