Kubernetes Engine での Jenkins の設定

このチュートリアルでは、ソフトウェア配布パイプラインをオーケストレートできるように Kubernetes Engine で Jenkins を設定する方法について説明します。

目標

  • Kubernetes Engine を使用して Kubernetes クラスタを作成する。
  • Helm を使用して Jenkins をインストールする。
  • Jenkins に接続する。

料金

このチュートリアルでは、Google Cloud Platform の課金対象となる以下のコンポーネントを使用します。

  • Compute Engine
  • Kubernetes Engine
  • Cloud Build

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを作成できます。 GCP を初めてご利用の場合には、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. Compute Engine、Kubernetes Engine、Cloud Builder API を有効にします。

    APIを有効にする

環境の準備

最初にデプロイ環境を準備します。

  1. Cloud Shell をアクティブにします。Cloud Shell によって、GCP Console のコマンドラインにアクセスできます。Cloud Shell には、GCP で開発を行うために必要な Cloud SDK などのツールが含まれています。Cloud Shell のプロビジョニングには数分かかることがあります。

    Cloud Shell をアクティブにする

    プロセスが完了すると、次の出力が表示されます。

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    

  2. デフォルトの Compute Engine ゾーンを us-east1-d に設定します。

    gcloud config set compute/zone us-east1-d
    

  3. サンプルコードのクローンを作成するか、zip ファイルをダウンロードします。

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    この Git リポジトリには、Jenkins のデプロイに使用する Kubernetes マニフェストが含まれています。マニフェストとその設定については、Kubernetes Engine 用に Jenkins を構成をご覧ください。

  4. サンプルコードのディレクトリに移動します。

    cd continuous-deployment-on-kubernetes
    

Kubernetes クラスタの作成

Kubernetes Engine を使用して、Kubernetes クラスタを作成、管理できます。

  1. Kubernetes Engine クラスタが接続して使用する Compute Engine ネットワークを作成します。

    gcloud compute networks create jenkins
    

  2. Kubernetes Engine を使用して Kubernetes クラスタをプロビジョニングします。このステップが完了するまでには数分かかることがあります。

    gcloud container clusters create jenkins-cd \
      --network jenkins --machine-type n1-standard-2 --num-nodes 2 \
      --scopes "https://www.googleapis.com/auth/projecthosting,storage-rw,cloud-platform"
    

    追加のスコープで、Jenkins が Cloud Source Repositories と Container Registry にアクセスできるようになります。

  3. クラスタが実行されていることを確認します。

    gcloud container clusters list
    

    STATUS 列の RUNNING を検索します。

    NAME        LOCATION    MASTER_VERSION  MASTER_IP    MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    jenkins-cd  us-east1-d  1.9.7-gke.3     35.231.8.57  n1-standard-2  1.9.7-gke.3   2          RUNNING
    

  4. ノードの数を確認するコマンドを実行して、クラスタに接続できることを確認します。

    kubectl get nodes
    

    クラスタに正常に接続できれば、2 つのノードがリストされるはずです。

    NAME                                        STATUS    ROLES     AGE       VERSION
    gke-jenkins-cd-default-pool-0e5fa564-drl8   Ready         3m        v1.9.7-gke.3
    gke-jenkins-cd-default-pool-0e5fa564-h8vb   Ready         3m        v1.9.7-gke.3
    

Helm のインストール

Helm を使用して、リポジトリから Jenkins をデプロイします。

  1. Helm バイナリをダウンロードしてインストールします。

    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz
    

  2. ファイルをローカル システムに解凍します。

    tar zxfv helm-v2.9.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    

  3. クラスタの RBAC 内に、自分をクラスタ管理者として追加します。これにより、クラスタ内での権限を Jenkins に付与できるようになります。

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    

  4. Helm のサーバー側である Tiller に、クラスタ内での cluster-admin 役割を付与します。

    kubectl create serviceaccount tiller --namespace kube-system
    kubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin \
                   --serviceaccount=kube-system:tiller
    

  5. Helm を初期化します。これにより、Tiller がクラスタ内に正常にインストールされます。

    ./helm init --service-account=tiller
    ./helm update
    

  6. 次のコマンドを実行して、Helm が正しくインストールされていることを確認します。

    ./helm version
    

    クラスタとサーバーのバージョンがどちらも v2.9.1 として示されるはずです。

    Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
    

Jenkins のインストール

カスタムの値ファイルを使用して Jenkins のインストールを構成します。構成の詳細については、jenkins/values.yaml ファイルを参照してください。

  1. Helm CLI を使用して、構成セットとともにチャートをデプロイします。

    ./helm install -n cd stable/jenkins -f jenkins/values.yaml --version 0.16.6 --wait
    

  2. コマンドが完了したら、Jenkins ポッドが Running 状態になり、コンテナが READY 状態になっていることを確認します。

    kubectl get pods
    

    READY 列には 1/1STATUS 列には Running と示されるはずです。Jenkins が初期化を完了するまでには数分かかることがあります。

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    

Jenkins のインストールでは、Kubernetes プラグインを使用してビルダー エージェントが作成されます。これらのエージェントは、Jenkins マスターでビルドの実行が必要になると自動的に起動されます。エージェントは処理の完了時に自動的に終了されて、エージェントのリソースがクラスタのリソースプールに戻されます。

Jenkins への接続

  1. Jenkins の Helm チャートによって自動的に作成された管理者パスワードを取得します。

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    

  2. Cloud Shell で、Jenkins UI に転送するためのポートを設定します。

    export POD_NAME=$(kubectl get pods -l "component=cd-jenkins-master" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
    

  3. Jenkins ユーザー インターフェースを開くには、Cloud Shell で [ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] をクリックします。

    port8080

  4. ウィンドウの右上にある [ログイン] をクリックします。[ユーザー] フィールドに「admin」と入力します。[パスワード] フィールドには、前のステップで取得したパスワードの値を入力します。

  5. [ログイン] ボタンをクリックします。

これで、Kubernetes Engine で管理される Jenkins と Kubernetes クラスタにアクセスできるようになりました。継続的デリバリー パイプラインでこれらのコンポーネントを使用して、このソリューションをさらに活用できます。

クリーンアップ

チュートリアルが終了したら、GCP で作成したリソースについて料金が発生しないようにクリーンアップします。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

ディスクの削除

  1. GCP Console で [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. jenkins-homeディスクの隣にあるチェックボックスをオンにします。
  3. ページの上部にある [削除] ボタンをクリックし、ディスクを削除します。

インスタンスを削除する

Compute Engine インスタンスを削除する手順は次のとおりです。

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 削除したいインスタンスの隣のチェックボックスを選択します。
  3. ページの上部にある、[削除] ボタンをクリックし、インスタンスを削除します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...