与 Jenkins 集成

本页面将指导您配置 Jenkins 以将构建的 Maven 软件包存储在 Artifact Registry 代码库中。

准备工作

如果目标代码库不存在, 请创建新代码库。

配置代码库的访问权限

  1. 为 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 控制台中的 GKE 菜单。

    访问 GKE 菜单

  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 > 管理插件 > 更新。

设置 Maven 项目

  1. 为 Jenkins 文档 GitHub 代码库中的 示例 Maven 项目创建分支。

  2. 克隆分支代码库。

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. 在 Jenkins 界面中设置新的流水线。

    1. 点击新建内容。
    2. 选择流水线 。
    3. 为流水线设置名称,然后点击确定 。
  4. 在常规标签页的“流水线”部分中配置以下选项:

    • 选择 SCM 中的流水线脚本。
    • 在 SCM 下拉列表中,选择 Git,然后指定用于连接到 GitHub 代码库的网址和凭据。

    流水线设置的屏幕截图

  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