與 Jenkins 整合

本頁面將引導您設定 Jenkins,以便將建構的 Maven 套件儲存在 Artifact Registry 存放區中。

事前準備

如果目標存放區不存在,請建立新的存放區

設定存放區存取權

  1. 建立 Jenkins 專用服務帳戶,供 Jenkins 與 Artifact Registry 搭配使用。

    執行下列指令,建立名稱為 jenkins-sa 的服務帳戶:

    gcloud iam service-accounts create jenkins-sa
    

    這會建立名為 jenkins-sa@PROJECT.iam.gserviceaccount.com的服務帳戶,其中 PROJECT 是您的專案 ID。

  2. 在包含存放區的專案中,將 Artifact Registry Writer 角色授予您建立的 Jenkins 服務帳戶。您可以為專案中的所有存放區授予角色,也可以為服務帳戶需要存取的特定存放區授予角色。

    如要進一步瞭解權限和依角色授予存取權,請參閱「設定存取權控管」。

設定 GKE 叢集

設定新的 Google Kubernetes Engine 叢集或節點集區時,請使用您為 Jenkins 建立的服務帳戶。

控制台

如要使用 Google Cloud 主控台建立叢集,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Artifact Registry」選單。

    前往 Artifact Registry 選單

  2. 按一下 [Create cluster] (建立叢集)

  3. 視需要設定叢集。請先不要點選 [Create] (建立)

  4. 按一下預設節點集區中的「更多選項」

  5. 在「安全性」專區中,選取您建立的 Jenkins 服務帳戶

  6. 按一下「Save」即可結束重疊視窗。

  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 外掛程式更新至最新版本。依序點選「Manage Jenkins」 >「Manage Plugins」 >「Updates」

設定 Maven 專案

  1. 在 Jenkins 說明文件 GitHub 存放區中,分支 Maven 範例專案

  2. 複製分支存放區。

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. 在 Jenkins 介面中設定新的管道。

    1. 按一下「新增項目」
    2. 選取「管道」
    3. 為管道命名,然後按一下「確定」
  4. 在「General」分頁中,在「Pipeline」部分設定下列選項:

    • 選取「Pipeline script from SCM」
    • 在 SCM 下拉式選單中,選取「Git」,然後指定連結至 GitHub 存放區的網址和憑證。

    Pipeline 設定的螢幕截圖

  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. 建立 YAML 檔案做為 Jenkins 代理程式的 Pod 範本。

    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 專案。

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. 在 Jenkins 介面中,為範例 Maven 專案中的應用程式啟動新的建構作業。

建構作業完成後,構件會加入您建立的 Artifact Registry Java 套件存放區。

執行下列指令,列出存放區中的套件:

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