Jenkins との統合

このページでは、ビルド済みの Maven パッケージを Artifact Registry リポジトリに格納するように Jenkins を構成する方法について説明します。

パッケージ管理はアルファ版です。これはアルファ版のユーザーにのみご利用いただけます。コンテナ管理で利用できる機能がすべて含まれているとは限りません。アルファ版のお申し込みには、登録フォームをご利用ください。

始める前に

  1. ターゲット リポジトリが存在しない場合は、新しいリポジトリを作成します

リポジトリへのアクセスを構成する

  1. Artifact Registry で使用する専用の Jenkins のサービス アカウントを作成します。

    次のコマンドを実行して、jenkins-sa という名前のサービス アカウントを作成します。

    gcloud iam service-accounts create jenkins-sa
    

    これにより、jenkins-sa@PROJECT.iam.gserviceaccount.com という名前のサービス アカウントが作成されます。PROJECT はプロジェクト ID です。

  2. リポジトリを含むプロジェクトで、作成した Jenkins サービス アカウントに Cloud Build Artifacts Writer のロールを付与します。プロジェクト内のすべてのリポジトリに対してロールを付与する、またはサービス アカウントがアクセスする必要がある特定のリポジトリに対してロールを付与することができます。

    権限とロール別のアクセス権の付与について詳しくは、アクセス制御の構成をご覧ください。

GKE クラスタを設定する

新しい Google Kubernetes Engine クラスタまたはノードプールを設定する場合は、Jenkins による使用を目的として作成したサービス アカウントを使用します。

Console

Cloud Console を使用してクラスタを作成するには、次の手順を行います。

  1. Cloud Console で [Artifact Registry] メニューに移動します。

    Artifact Registry メニューに移動

  2. [クラスタを作成] をクリックします。

  3. 必要に応じてクラスタを構成します。まだ [作成] はクリックしないでください。

  4. デフォルトのノードプールで [その他のオプション] をクリックします。

  5. [セキュリティ] セクションで、作成した Jenkins サービス アカウントを選択します。

  6. [保存] をクリックして、オーバーレイを終了します。

  7. [作成] をクリックします。

gcloud

次のいずれかのコマンドを使用して、Jenkins サービス アカウントを使用してクラスタを作成します。コマンドで、PROJECT はプロジェクト ID です。

サービス アカウントでクラスタを作成するには、次のコマンドを実行します。

gcloud container clusters create example-cluster --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

既存のクラスタにノードプールを作成するには、次のコマンドを実行します。

gcloud container node-pools create example-pool --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

このコマンドの詳細については、gcloud container clusters create のドキュメントをご覧ください。

GKE での Jenkins の設定

  1. GKE での Jenkins の設定に関するチュートリアルに従います。前のセクションで作成したクラスタを使用します。

  2. Jenkins で、GKE プラグインを最新バージョンに更新します。[Jenkins の管理] > [プラグインの管理] > [Updates] をクリックします。

Maven プロジェクトを設定する

  1. Jenkins ドキュメントの GitHub リポジトリでサンプル Maven プロジェクトをフォークします。

  2. フォークされたリポジトリのクローンを作成します。

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. Jenkins のインターフェースで新しいパイプラインを設定します。

    1. [新しいアイテム] をクリックします。
    2. [Pipeline] を選択します。
    3. パイプラインの名前を設定して、[OK] をクリックします。
  4. [全般] タブの [Pipeline] セクションで次のオプションを構成します。

    • [Pipeline script from SCM] を選択します。
    • [SCM] プルダウン リストで [Git] を選択し、GitHub リポジトリに接続するための URL と認証情報を指定します。

    パイプライン設定のスクリーンショット

  5. [保存] をクリックします。

リポジトリへの接続を構成する

リポジトリに接続するためのリポジトリと認証情報を使用して Jenkins を構成します。

  1. リポジトリを Maven pom.xml に追加します。追加するスニペットを出力するには、次のコマンドを使用します。

    gcloud artifacts print-settings mvn [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION]
    

    ここで

    • PROJECT は、プロジェクト ID です。 このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
    • REPOSITORY はリポジトリの ID です。デフォルトの Artifact Registry リポジトリを構成した場合は、このフラグがコマンドから省略されている場合に使用されます。
    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
  2. Jenkins エージェント用の Pod テンプレートとして YAML ファイルを作成します。

    mkdir jenkins
    cat > jenkins/maven-pod.yaml << EOF
    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: maven
        image: maven:3.3.9-jdk-8-alpine
        command: ['cat']
        tty: true
    EOF
    
  3. ファイル Jenkinsfile を変更します。

    pipeline {
        agent none
        stages {
            stage('Deploy') {
                steps {
                     agent {
                         kubernetes {
                             label 'mavenpod'
                             yamlFile 'jenkins/maven-pod.yaml'
                           }
                       }
                       container('maven') {
                       sh "mvn -B clean deploy"
                     }
                }
            }
        }
    }
    

ビルドを開始する

  1. 行った変更を GitHub プロジェクトに push します。

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. Jenkins インターフェースで、サンプル Maven プロジェクトでアプリケーションの新しいビルドを開始します。

ビルドが正常に完了すると、作成した Artifact Registry Maven リポジトリにアーティファクトが追加されます。

次のコマンドを実行して、リポジトリ内のパッケージを一覧表示します。

gcloud artifacts packages list --repository=mvn-jenkins --location=LOCATION

出力は次の例のようになります。

Listing items under project {YOUR_PROJECT}, repository mvn-jenkins.

PACKAGE                   CREATE_TIME          UPDATE_TIME
com.mycompany.app:my-app  2019-06-25T17:09:44  2019-06-25T17:09:44