ウォークスルー: Jenkins XをKubernetesクラスターにセットアップする


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組織のアカウントはプライベートリポジトリにアクセスできません。パブリックな環境リポジトリを作成するよう指定するには、environmentGitPublictrueを設定します。
  • 変更を保存し、コマンドラインで次のコマンドを実行します。
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がブートされます。
  • 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>