与 Jenkins 集成

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

软件包管理目前为 Alpha 版。它仅适用于 Alpha 版用户,可能不包含容器管理可用的所有特性。若要申请 Alpha 版,请填写注册表单

准备工作

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

配置代码库的访问权限

  1. 为 Jenkins 创建一个专用服务帐号,以便与 Artifact Registry 配合使用。

    运行以下命令以创建一个名为 jenkins-sa 的服务帐号:

    gcloud iam service-accounts create jenkins-sa
    

    上述命令将创建一个名为 jenkins-sa@PROJECT.iam.gserviceaccount.com 的服务帐号,其中 PROJECT 是您的项目 ID。

  2. 在包含代码库的项目中,将 Cloud Build Artifacts Writer 角色授予您创建的 Jenkins 服务帐号。您可以为项目中的所有代码库授予该角色,也可以为服务帐号需要访问的特定代码库授予该角色。

    如需详细了解权限以及如何按角色授予访问权限,请参阅配置访问权限控制

设置 GKE 集群

设置新的 Google Kubernetes Engine 集群或节点池时,请使用您为 Jenkins 创建的服务帐号。

控制台

要使用 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 > 管理插件 > 更新

设置 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 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