Google Kubernetes Engine での Jenkins の設定

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

目標

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

料金

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

  • Compute Engine
  • Google Kubernetes Engine
  • Cloud Build

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

始める前に

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

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

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

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

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

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

  4. Compute Engine、GKE、Cloud Build 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 クラスタの作成

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

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

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

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

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

    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
    
  3. クラスタに接続できることを確認します。

    kubectl cluster-info
    

    クラスタに正常に接続できた場合、Kubernetes コンポーネントの URL が表示されます。

    Kubernetes master is running at https://130.211.178.38
    GLBCDefaultBackend is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/default-http-backend
    Heapster is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/heapster
    KubeDNS is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kube-dns
    kubernetes-dashboard is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard
    

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 repo 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
    

    Jenkins インストールの構成に関する詳細については、Jenkins チャートのドキュメント ページをご覧ください。

  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
    
  3. 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 &
    
  4. Jenkins サービスが適切に作成されたことを確認します。

    kubectl get svc
    

    出力例:

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

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

Jenkins への接続

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

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. Jenkins ユーザー インターフェースを開くには、Cloud Shell で [ウェブでプレビュー] をクリックし、[プレビューのポート: 8080] をクリックします。

    port8080

  3. ウィンドウの右上にある [log in] をクリックします。[User] フィールドに「admin」と入力します。[Password] フィールドには、前のステップで取得したパスワードの値を入力します。

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

これで、GKE で管理される 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. インスタンスを削除するには、[削除] () をクリックします。

次のステップ

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

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