Jenkins XをGKEにホストされたKubernetesクラスターにセットアップする
※ この記事はJenkins X Blog 2020年3月10日Kara de la Marck投稿の記事「Walkthrough: Setting up Jenkins X on a Kubernetes cluster」(CC BY 3.0)の翻訳です。
このチュートリアルでは、Jenkins XをGKEにホストされたKubernetesクラスターにセットアップする方法を説明します。GitプロバイダーはGitHubを使用します。
このチュートリアルの目的は、Jenkins Xの詳細なセットアップ手順を案内することです。
チュートリアルで利用する構成
- GitHub GitプロバイダーおよびGitHubユーザーアカウント(例:
MarckK
) - Kubernetesリソースのプロビジョニング/Kubernetesクラスターの作成を行えるGoogle Cloud Platform (GCP)アカウント
- インストール済みのJenkins Xの
jx
バイナリ。jx
バイナリのインストール手順を参照してください。 - Kubernetesコマンドラインツール。
jx install
コマンドを使用してローカルにインストールできます。
jx install dependencies -d kubectl
2つのアカウントをメンバーとするGitHub組織を作成します。1つはMarckK
などのGitHubユーザーアカウント、もう1つはjx-bot
などのGitHub 「パイプライン」ボットアカウントです。
- 新しいGitHub組織を作成するには、GitHub最上部のナビゲーションバー右上にある+をクリックするか、create an organization pageをクリックします。ここではGitHub組織として無料の「Team for Open Source」プランを選択します。つまり、組織は無制限のプライベートリポジトリを持つことはできません。組織に任意の名前を付けます。例:
jenkins-x-space
MarckK
などのGitHubユーザーアカウントを組織に招待します。このGitHubユーザーアカウントは、開発リポジトリの作成と管理を行います。- 次に、GitHub Pipelineボットアカウントを作成します。このPipelineボットは、プルリクエストの通知を自動化し、簡易的な検証とコードのマージ受け入れ用にプレビュー環境を作成します。Pipelineボットは
jenkins-x-space
などのGitHub組織のメンバーとして作成する必要があります。ボットとしてだけ使用するまったく新しいアカウントを作成します。ボットに任意の名前を付けます。例:jx-bot
ボットアカウントには、組織で作成されたトークンが必要です。ボットはトークンによって認証され、組織内のリポジトリに対してさまざまなタスクを実行します。こちらのGitHub LinkからPipelineボット用に適切なパーミッションでGitトークンを生成し、40文字のトークンをコピーします。
GitHubによって生成された40文字のトークンは、1回しか表示されないため、ブラウザーのタブやウィンドウを閉じる前にただちにコピーする必要があります。いったん表示した後は、トークンを再取得できません。後でトークンが必要になるので、コピーを保存しておいてください。
- ここで、GitHub Pipelineボットアカウントをサインアウトし、GitHubユーザーアカウント
MarckK
に戻ります。
手順 1 – Kubernetesクラスターの作成
jx create cluster gke
はGoogle Kubernetes Engine (GKE)上にクラスターを作成します。名前を指定してクラスターを初期化できます。コマンドラインから次のコマンドを実行します。
jx create cluster gke --skip-installation -n <cluster name>
- Webブラウザーが開き、GCPアカウントに紐付けるE-mailアカウントを選択し、Google Cloud SDKからアカウントへのアクセスを許可するよう求められます。確定したら、ブラウザーのページを閉じます。
- コマンドラインに戻ると、
jx create cluster
はリストからGoogle Cloud Projectを選択するよう求めます。 - クラスターをインストールしたい場所に一番近いゾーンを選択するよう求められます。たとえば、クラスターが主にアメリカ合衆国の東海岸にいるユーザーにサービスを提供する場合、リストから
us-east1-b
を選択します。 - デフォルトの質問が自動で実行され、指定されたゾーンでクラスターの作成が始まります。
最後に、次のように出力されます。
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
walkthrough europe-north1-a 1.14.10-gke.17 35.228.74.166 n1-standard-2 1.14.10-gke.17 3 RUNNING
おめでとうございます、Kubernetesクラスターが作成されました。
手順 2 – クラスターへのJenkins Xのインストール
- まず、 Jenkins X Boot configuration repoをクローンし、新しくクローンしたリポジトリに
cd
で移動します。 - 新しくクローンしたリポジトリの
jx-requirements.yml
ファイルを開きます(例:jenkins-x-boot-config/jx-requirements.yml
)。このファイルは、以下のようなインストールの要件を指定します。- 使用するKubernetesプロバイダー
- シークレットをローカルファイルシステムに保存するか、vaultに保存するか
- Terraformを使用してクラウドリソースを管理するかどうか
このファイルが
jx boot
のメインの設定ファイルであり、大部分の設定の変更はこのファイルで行うことに注意してください。jx-requirements.yml
ファイルをひととおり見ておくとよいでしょう。すでにあるデフォルトの設定を確認し、必要に応じて変更します。 - このセットアップでは、
jx-requirements.yml
で行う必要がある変更が1つあります。デフォルトでは、Jenkins Xはプライベート環境リポジトリを作成します。これはjx-requirements.yml
では、environmentGitPublic: false
と設定されています。しかし、Jenkins Xが作成する環境リポジトリを保持する組織として、無料のオープンソースGitHub組織をセットアップしましたが、このタイプのGitHub組織のアカウントはプライベートリポジトリにアクセスできません。パブリックな環境リポジトリを作成するよう指定するには、environmentGitPublic
にtrue
を設定します。 - 変更を保存し、コマンドラインで次のコマンドを実行します。
jx boot
まだブート git リポジトリのクローンに移動していない場合、jx boot
はこのリポジトリをクローンし、cd
でクローンに移動します。
詳細はJenkins X Boot in the documentationを参照してください。
GitおよびJenkins Xの事前インストール済みセットアップがチェックされ、検証されます。次のように出力されます。
Currently connected cluster is <cluster_name> in <cluster_location> in project <your_chosen_project>
<cluster_name>
をjx boot
するかどうか尋ねられます。
その後、クラスターにJenkins Xを適切にインストールするために一連の質問に回答するよう求められます。
Git Owner name for environment repositories
を入力するよう求められます。jenkins-x-space
など、作成済みの組織を入力します。Comma-separated git provider usernames of approvers for development environment repository
を指定するよう求められます。MarckK
など、作成した組織のメンバーであるGitHubアカウント名を入力します。TLS is not enabled so your webhooks will be called using HTTP.
という警告が表示される場合があります。続行するかどうか確認されます。- ‘No’と入力すると、
jx boot
は次のように出力して終了します。error: cannot continue because TLS is not enabled.
- ‘Yes’と入力すると、クラスターに名前空間
jx
が作成され、この名前空間でJenkins Xがブートされます。
- ‘No’と入力すると、
jx
をアップグレードするかどうか尋ねられる場合があります。‘Yes’と入力してjx boot
を再実行することが推奨されます。- GKE上のストレージの有効化に関する情報が表示されます。このウォークスルーチュートリアルでは、ストレージを有効化する必要はありません。
- JX Bootのパイプラインステップに関する情報が表示されます。
Jenkins X Admin Username
の入力を求められます。ユーザー名を入力するか、リターンキーを押してデフォルトのユーザー名admin
を使用します。Jenkins X Admin Password
を入力するよう求められます。パスワードを入力します。Pipeline bot Git username
を入力するよう求められます。jx-bot
など、作成済みのPipelineボット名を入力します。Pipeline bot Git email address
を入力するよう求められます。Pipelineボットをセットアップしたときに使用したE-mailアドレスを入力します。Pipeline bot Git token
を入力するよう求められます。生成し保存しておいたトークンを入力します。Do you want to configure an external Docker Registry?
という質問が表示されます。このチュートリアルでは’No’と入力します。- さらにパイプラインステップが実行されます。ポッドが実行中であるというメッセージと、Jenkins Xセットアップのステータスを通知するその他の検証情報が表示されます。
その後、次のようにインストールプロセスのステータスに関する確認が表示されます。
Installation is currently looking: GOOD
jenkins-x-space
などの作成済みの組織に、dev、stating、production環境用に3つのリポジトリが追加されているはずです。これらはそれぞれクラスターの dev、staging、production 名前空間に対応しています。
KubernetesクラスターにJenkins Xがインストールされています。
作成されたJenkins X環境、対応するGitOps git リポジトリ、環境間でのデフォルトのプロモーションストラテジーを参照するには、次のコマンドを実行します。
jx get environments
次のように表示されます。
NAME LABEL KIND PROMOTE NAMESPACE ORDER CLUSTER SOURCE REF PR
dev Development Development Never jx 0 https://github.com/jenkins-x-space/environment-walkthrough-dev.git master
staging Staging Permanent Auto jx-staging 100 https://github.com/jenkins-x-space/environment-walkthrough-staging.git master
production Production Permanent Manual jx-production 200 https://github.com/jenkins-x-space/environment-walkthrough-production.git master
PROMOTE列の説明は次のとおりです。
- Development環境のプロモートはNeverです。これは、この環境ではローカルで作業しており、何もデプロイしないからです。
- Stating環境のデフォルトはAutoプロモートです。これは、リポジトリのマスターブランチで実行されたすべてのマージが新しいバージョンとしてstagingに自動でデプロイされることを意味します。
- Production環境のデフォルトはManualプロモートストラテジーです。これは、jx promotionコマンドを使用して、stagingのアプリケーションバージョンを手動でプロモートする必要があることを意味します。
SOURCE列には、各環境用のgitリポジトリが表示されます。
手順 3 – アプリケーションの作成
Jenkins Xがインストールされたクラスターが動作するようになったので、次はJenkins Xでビルドおよびデプロイを行うアプリケーションを作成します。
クイックスタートを使用する
JXには標準化されたテンプレートからビルドを作成するcreate quickstart
コマンドがあります。このコマンドを実行するには、jenkins-x-boot-config
ディレクトリから出て次のように入力します。
jx create quickstart --git-public=true
--git-public=true
を指定するのは、無償版のGitHub組織の要件に合わせて、新しく作成されるクイックスタートアプリケーションがGitHubにパブリックなリポジトリを作成するようにするためです。
このサンプルでは、 golang-http
を選択します。
以下のような一連の質問に答えます
Do you wish to use <your GitHub user name> as the Git user name?
:y
を選択します。Who should be the owner of the repository?
:jenkins-x-space
など、作成した組織を選択します。Enter the new repository name
: 新規アプリケーションの名前を選択します。例:jx-tutorial
この後、JXはアプリケーション用のgitリポジトリのセットアップ手順を案内します。
初めてアプリケーションを作成した場合、アプリケーションのビルド/デプロイに必要なビルダーイメージをすべてダウンロードするため、数分かかることがあります。
アプリケーションのステータスを参照するには、次のコマンドを実行します。
jx get activity -f jx-tutorial -w
注意: -f は –filter、-w は –watch を表します。
パイプラインが完了したら、次のコマンドを実行して各環境のアプリケーションとそのURLを確認します。
jx get applications
アプリケーションをproduction環境にプロモートする
jx promote
コマンドを使用すると、このバージョンをstagingからproductionにプッシュできます。
cd jx-tutorial
GitHubアカウントで2FAを有効にしている場合は、パスワードの入力を求められたとき、APIトークンを使用する必要があるかもしれません。
jx promote jx-tutorial --version 0.0.1 --env production
デプロイメントの進捗をチェックするには、次のコマンドを使用します。
jx get activity -f jx-tutorial -w
jx get applications
おめでとうございます
すべての設定が終わりました。
これで、すべての設定が完了したJenkins XがGoogle Kubernetes Engineにインストールされました。
不要なコストがかからないよう、ここでKubernetesのクラスターをシャットダウンしておくとよいでしょう。現在のアカウントで実行されているすべてのクラスターを参照するには、次のコマンドを使用します。
gcloud container clusters list
クラスターを削除するには、次のコマンドを実行します。
gcloud container clusters delete <clustername> --zone <zone>