このページでは、ビルドされた Maven パッケージを Artifact Registry リポジトリに格納するように Jenkins を構成する方法について説明します。
始める前に
ターゲット リポジトリが存在しない場合は、新しいリポジトリを作成します。
リポジトリへのアクセスを構成する
Artifact Registry で使用する専用の Jenkins のサービス アカウントを作成します。
次のコマンドを実行して、
jenkins-sa
という名前のサービス アカウントを作成します。gcloud iam service-accounts create jenkins-sa
これにより、jenkins-sa@PROJECT.iam.gserviceaccount.com という名前のサービス アカウントが作成されます。PROJECT はプロジェクト ID です。
リポジトリを含むプロジェクトで、作成した Jenkins サービス アカウントに Artifact Registry 書き込みロールを付与します。プロジェクト内のすべてのリポジトリに対してロールを付与する、またはサービス アカウントがアクセスする必要がある特定のリポジトリに対してロールを付与することができます。
権限とロール別のアクセス権の付与について詳しくは、アクセス制御の構成をご覧ください。
GKE クラスタを設定する
新しい Google Kubernetes Engine クラスタまたはノードプールを設定する場合は、Jenkins による使用を目的として作成したサービス アカウントを使用します。
Console
Google Cloud コンソールを使用してクラスタを作成するには、次の手順を行います。
Google Cloud コンソールで Artifact Registry メニューにアクセスします。
[クラスタを作成] をクリックします。
必要に応じてクラスタを構成します。まだ [作成] はクリックしないでください。
デフォルトのノードプールで [その他のオプション] をクリックします。
[セキュリティ] セクションで、作成した Jenkins サービス アカウントを選択します。
[保存] をクリックして、オーバーレイを終了します。
[作成] をクリックします。
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 の設定
GKE での Jenkins の設定のチュートリアルに従います。前のセクションで作成したクラスタを使用します。
Jenkins で、GKE プラグインを最新バージョンに更新します。[Jenkins の管理] > [プラグインの管理] > [Updates] をクリックします。
Maven プロジェクトを設定する
Jenkins ドキュメントの GitHub リポジトリでサンプル Maven プロジェクトをフォークします。
フォークされたリポジトリのクローンを作成します。
git clone git@github.com:USER_NAME/simple-java-maven-app.git
Jenkins インターフェースで新しいパイプラインを設定します。
- [New Item] をクリックします。
- [Pipeline] を選択します。
- パイプラインの名前を設定し、[OK] をクリックします。
[全般] タブの [Pipeline] セクションで次のオプションを構成します。
- [SCM のパイプライン スクリプト] を選択します。
- SCM プルダウン リストで [Git] を選択してから、GitHub リポジトリに接続する URL と認証情報を指定します。
[保存] をクリックします。
リポジトリへの接続を構成する
リポジトリに接続するためのリポジトリと認証情報を使用して Jenkins を構成します。
Maven
pom.xml
にリポジトリを追加します。次のコマンドを使用して、追加するスニペットを出力します。gcloud artifacts print-settings mvn [--project=PROJECT] \ [--repository=REPOSITORY] [--location=LOCATION]
ここで
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
ファイル
Jenkinsfile
を変更します。pipeline { agent none stages { stage('Deploy') { steps { agent { kubernetes { label 'mavenpod' yamlFile 'jenkins/maven-pod.yaml' } } container('maven') { sh "mvn -B clean deploy" } } } } }
ビルドの開始
行った変更を GitHub プロジェクトに push します。
git add . && git commit -m "Configure my Jenkins pipeline" && git push
Jenkins インターフェースで、サンプル Maven プロジェクトのアプリケーション用の新しいビルドを開始します。
ビルドが正常に完了すると、作成した Artifact Registry Java Package Repository にアーティファクトが追加されます。
次のコマンドを実行して、リポジトリ内のパッケージを一覧表示します。
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