
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
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 の概要ガイドをご覧ください。
この手順の完了には数分かかることがあります。追加のスコープで、Jenkins が Cloud Source Repositories と Google Container Registry にアクセスできるようになります。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Kubernetes クラスタが正常に作成されている場合は、評価スコアが表示されます。
このラボでは、Helm を使用して Charts リポジトリから Jenkins をインストールします。Helm は、Kubernetes アプリケーションの構成とデプロイを容易にするパッケージ管理システムです。Jenkins をインストールすると、CI / CD パイプラインを設定できるようになります。
Jenkins のインストール時に、設定に必要な値をテンプレートとして提供する values
ファイルを使用できます。
カスタムの values
ファイルを使用して Kubernetes クラウドを自動的に構成し、以下の必要なプラグインを追加します。
これにより、Jenkins がクラスタと GCP プロジェクトに接続できるようになります。
このコマンドは完了までに数分かかる場合があります。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Jenkins チャートが正常に構成されている場合は、評価スコアが表示されます。
Running
状態になり、コンテナが READY 状態になっていることを確認します。出力例:
次の出力が表示されます。
出力例:
Jenkins マスターがリクエストしたときに必要に応じて自動的にビルダーノードが起動するように、Kubernetes プラグインを使用しています。処理が完了するとノードが自動的に終了し、リソースがクラスタのリソースプールに戻されます。
このサービスでは、selector
に一致するすべての Pod のポート 8080
と 50000
が公開されることに注意してください。ここでは、Kubernetes クラスタ内の Jenkins ウェブ UI ポートとビルダー / エージェント登録ポートが公開されます。また、jenkins-ui
サービスは ClusterIP を使用して公開されるため、クラスタ外からはアクセスできません。
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 と表示されるはずです)。
これで、サンプル アプリケーションが正常にデプロイされました。次は、継続的かつ確実に変更をデプロイするためのパイプラインを設定します。
gceme
サンプルアプリのコピーを作成して、Cloud Source Repositories に push します。表示される警告は無視してください。このリポジトリの使用料を請求されることはありません。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。ソース リポジトリが正常に作成されている場合は、評価スコアが表示されます。
[EMAIL_ADDRESS]
を Git メールアドレスに置き換え、[USERNAME]
を Git ユーザー名に置き換えてください。Jenkins がコード リポジトリにアクセスできるように認証情報を構成します。Jenkins はクラスタのサービス アカウント認証情報を使用して、Cloud Source Repositories からコードをダウンロードします。
Jenkins のユーザー インターフェースで、左側のナビゲーションにある [Manage Jenkins(Jenkins の管理)] をクリックし、[Security(セキュリティ)] > [Credentials(認証情報)] をクリックします。
[System(システム)] をクリックします。
[Global credentials (unrestricted)(グローバル認証情報(制限なし))] をクリックします。
右上にある [Add Credentials(認証情報を追加)] をクリックします。
[Kind(種類)] プルダウンから [Google Service Account from metadata(メタデータからの Google サービス アカウント)] を選択し、[OK] をクリックします。
これでグローバル認証情報が追加されました。認証情報の名前は、ラボの [接続の詳細
] セクションにあるご自分のプロジェクト ID
です。
http://cd-jenkins:8080
cd-jenkins-agent:50000
Jenkins のユーザー インターフェースに移動し、次の手順でパイプライン ジョブを構成します。
左側のパネルで [Dashboard(ダッシュボード)] > [New Item(新しいアイテム)] をクリックします。
プロジェクトに「sample-app」という名前を付けて [Multibranch Pipeline(マルチブランチ パイプライン)] オプションを選択し、[OK] をクリックします。
次のページの [Branch Sources(ブランチソース)] のセクションで、[Add Source(ソースの追加)] プルダウンから [Git] を選択します。
Cloud Source Repositories 内にある sample-app リポジトリの HTTPS クローン URL を [Project Repository(プロジェクト リポジトリ)] 欄に貼り付けます。[PROJECT-ID]
は実際のプロジェクト ID に置き換えてください。
[Credentials(認証情報)] プルダウンで、前の手順でサービス アカウントを追加する際に作成した認証情報の名前を選択します。
[Scan Multibranch Pipeline Triggers(スキャン マルチブランチ パイプライン トリガー)] の [Periodically if not otherwise run(実行されない場合は定期的に実行)] をオンにして、[Interval(間隔)] の値を [1 minute(1 分)] に設定します。
ジョブの構成は次のようになります。
以上の手順が完了すると、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
コマンドを試してください。以下の出力が表示されたら次に進みます。これで、開発環境の設定が完了しました。次は、前のモジュールで学んだことを踏まえ、カナリア リリースをデプロイして新しい機能をテストします。
開発環境でアプリが最新のコードを実行することが確認できたので、今度はそのコードをカナリア環境にデプロイしてみましょう。
2.0.0
が返されます。これで、カナリア リリースのデプロイが完了しました。次は、新しいバージョンを本番環境にデプロイします。
カナリア リリースが成功し、お客様からも苦情が寄せられていないと想定して、本番環境へのデプロイを開始します。
マスター パイプラインが開始されたことが Jenkins に表示されます。
1.0.0
のインスタンスが表示される場合は、上記のコマンドを再度実行してください。このコマンドを停止するには、Ctrl+C キーを押します。出力例:
gceme アプリケーションの情報カードが表示されるサイトに移動することもできます。カードの色は青からオレンジに変わっています。
出力例:
今回のラボで学習した内容の理解を深めていただけるよう、以下の選択式問題を用意しました。正解を目指して頑張ってください。
ラボを完了する
本番環境にアプリケーションが正常にデプロイされました。
このハンズオンラボでは、Kubernetes Engine で Jenkins を使ってデプロイすることで、継続的デリバリー パイプラインと継続的デプロイ パイプラインを有効にしました。Kubernetes Engine に重要な DevOps ツールをデプロイし、本番環境用に構成することもできました。さらに、kubectl コマンドライン ツールを使用して YAML ファイルのデプロイ構成を処理し、開発プロセスとデプロイ プロセス用に Jenkins パイプラインを設定する方法について学びました。今後は、これらのツールを実際の DevOps 環境で自信を持って活用していただけるでしょう。
このセルフベース ラボは、「Kubernetes in Google Cloud」、「Cloud Architecture」、「DevOps Essentials」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
Hello Node Kubernetes に進んでクエストを続けるか、以下の Google Cloud Skills Boost ラボをご確認ください。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。クラスでは、技術スキルとベスト プラクティスを迅速に身につけ、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2023 年 9 月 20 日
ラボの最終テスト日: 2023 年 9 月 20 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
One lab at a time
Confirm to end all existing labs and start this one