连接到 Jenkins

您可以使用 Jenkins 触发器和 Secure Source Manager Webhook 启动自动构建。

所需的角色

如需获得创建 Jenkins build 触发器所需的权限,请让管理员向您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

如需了解如何授予 Secure Source Manager 角色,请参阅使用 IAM 进行访问权限控制向用户授予实例访问权限

设置网络钩子触发器

Jenkins 使用构建触发器插件来启用 CI/CD 自动化。您可以配置触发器以侦听传入的事件(例如,将新提交推送到代码库或者启动拉取请求时),然后在收到新事件时自动执行构建。您还可以配置触发器,以便对源代码库的任何更改或仅符合特定条件的更改构建代码。

如需设置通用 Jenkins Webhook 触发器,请执行以下操作

  1. 在 Jenkins 服务器上安装 Jenkins Git 插件SSH 凭据插件Generic Webhook Trigger 插件

  2. 在 Jenkins 服务器中生成有效的 SSH 密钥对。 Secure Source Manager 仅支持 RSA 类型的密钥。

  3. 运行以下命令,将 Secure Source Manager 实例网域添加到 Jenkins 服务器 SSH known_hosts 文件:

    ssh -t git@INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.us-central1.sourcemanager.dev
    

    其中:

    • INSTANCE_ID 是 Secure Source Manager 实例的名称。
    • INSTANCE_PROJECT_NUMBER 是您的 Secure Source Manager 实例的项目编号。如需了解在哪里可以找到项目编号,请参阅标识项目

    例如,以下命令会为项目编号为 123456789 的名为 prod-test-instance 的实例添加实例网域。

    ssh -t git@prod-test-instance-123456789-ssh.us-central1.sourcemanager.dev
    

    回复 yes 可将实例网域添加到已知主机列表中。

  4. 在 Jenkins 的管理凭据页面中:

    1. 选择 SSH 用户名与私钥
    2. 粘贴您的 Jenkins 服务器 SSH 私钥。
    3. 类型下拉菜单中,根据需要填写其他字段。
  5. 点击创建

  6. 在 Jenkins 网页界面中,创建一个新的 Jenkins 作业。

  7. 在 Jenkins 作业的配置页面中,选择 Source Code Management(源代码管理)部分下的 Git

  8. Git 部分中,粘贴 Secure Source Manager 代码库 SSH 网址作为代码库网址,输入您的 build 分支(例如 */main),然后选择您之前在管理凭据页面中添加的已保存的 SSH 私钥凭据。

  9. 构建触发器部分中,选择通用 Webhook 触发器

    您可以选择添加令牌,以便仅在调用时提供该令牌的情况下触发作业。如需添加令牌,您可以在通用 Webhook 触发器部分下的令牌字段中输入令牌。

  10. 构建部分中,提供您希望为此 Jenkins 作业使用的构建脚本。例如,您可以执行 cat README.md 以输出 README.md 的内容。

  11. 点击保存以创建 Jenkins 作业。

设置服务账号并授予所需权限

  1. 如果您还没有要使用的服务账号,请创建一个服务账号

    确保您对服务账号拥有 iam.serviceAccounts.actAs 权限。此权限是 Service Account User (roles/iam.serviceAccountUser) 角色的一部分。

  2. 在 Secure Source Manager 网页界面中,点击 更多选项菜单。

  3. 点击服务账号 SSH 密钥。系统会打开服务账号 SSH 密钥页面,并显示您添加的所有现有密钥的列表。

  4. 点击添加密钥

  5. 添加 SSH 密钥页面中,为您的密钥输入以下值:

    1. 服务账号:您要使用 SSH 密钥的服务账号的电子邮件地址,格式为 SA_NAME@PROJECT_ID.iam.gserviceaccount.com

      地点

      • SA_NAME 是服务账号名称。
      • PROJECT_ID 是服务账号所在项目的项目 ID。
    2. SSH 公钥:您的 Jenkins 公共 SSH 密钥。

授予 Secure Source Manager 服务代理权限

如果服务账号与您的 Secure Source Manager 实例不在同一项目中,您还必须向 Secure Source Manager 服务代理授予 Service Account Token Creator (roles/iam.serviceAccountTokenCreator) 角色或 iam.serviceAccounts.signJwt 权限。

如果您的服务账号与 Secure Source Manager 实例位于同一项目中,请跳至向服务账号授予代码库角色

  1. 运行以下命令,获取服务账号的现有 IAM 政策:

    gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \
        --format json
    

    其中,SERVICE_ACCOUNT 是您要使用的服务账号。 账号应采用数字服务账号 ID 或电子邮件地址格式,例如:123456789876543212345my-iam-account@somedomain.com

    输出包括所有现有绑定,如果没有现有绑定,则包括类似于以下内容的 etag 值:

    {
    "etag": "BwUjHYKJUiQ="
    }
    
  2. 将输出复制到名为 policy.json 的新文件中。

  3. 如需向 Secure Source Manager 服务代理授予 Service Account Token Creator (roles/iam.ServiceAccountTokenCreator) 角色,请修改 policy.json 以添加以下内容:

    {
        "role": "roles/iam.serviceAccountTokenCreator",
        "members": [
            "serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com"
        ]
    }
    

    其中,INSTANCE_PROJECT_NUMBER 是您的 Secure Source Manager 实例的项目编号。

  4. 运行以下命令以替换服务账号的现有 IAM 政策:

    gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILE
    

    替换以下内容:

    • SERVICE_ACCOUNT 替换为服务账号 ID 或电子邮件地址。
    • POLICY_FILE 替换为包含新政策的 JSON 格式文件的位置和名称。

向服务账号授予代码库角色

  1. 在 Secure Source Manager 网页界面中,前往您要向服务账号授予权限的代码库。
  2. 点击权限标签页。
  3. 点击添加用户
  4. 添加主账号字段中,输入服务账号电子邮件地址。
  5. 角色下拉菜单中,选择 Secure Source Manager Repository Reader
  6. 运行以下命令,为服务账号分配 securesourcemanager.instanceAccessor 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SA_EMAIL \
        --role=roles/securesourcemanager.instanceAccessor
    

    替换以下内容:

    • PROJECT_ID 替换为 Secure Source Manager 实例项目 ID。
    • SA_EMAIL 替换为服务账号电子邮件地址。

设置网络钩子

  1. 在 Secure Source Manager 网页界面中,找到要为其创建 Webhook 的代码库。
  2. 点击设置
  3. 点击 Webhooks,然后点击 Add webhook
  4. Hook ID 字段中,输入 Webhook 的 ID。

  5. Target 网址(目标网址)字段中,输入 Jenkins 触发器网址。

  6. 如果您在配置 Jenkins 触发器时使用了可选令牌,则 Jenkins 触发器网址的末尾将包含该令牌。为防止令牌泄露,请将其从目标网址末尾移除,然后复制到敏感查询字符串字段中。

    如需在触发器网址中找到令牌,请查找以 token= 开头的文本

    例如,如果您的网址类似于以下网址: https://jenkins-server.com/generic-webhook-trigger/invoke?token=jenkins-job1

    复制并移除目标网址字段中以问号开头的 ?token=jenkins-job1 部分。然后,移除开头的问号,将剩余部分 token=jenkins-job1 移至敏感查询字符串字段。

  7. 触发条件部分中,选择以下选项之一:

    • 推送:在向代码库推送时触发。
    • 拉取请求状态已更改:在拉取请求状态发生更改时触发。
  8. 如果您选择了推送,则可以在分支过滤条件字段中输入推送事件的许可名单。

    分支过滤条件字段使用 glob 模式,只有对匹配分支的操作才会触发 build。如果该字段为空或为 *,则系统会报告所有分支的推送事件。

  9. 点击 Add webhook

  10. Webhook 会显示在 Webhook 页面中。

测试您的网络钩子

  1. 在 Secure Source Manager 的网络钩子页面中,点击要测试的网络钩子。
  2. 前往页面底部,然后点击测试交付

    向传送队列添加了虚假事件。可能需要几秒钟时间才能显示在配送记录中。

  3. 您还可以使用 git 命令推送或合并拉取请求,以测试 Webhook。

  4. 在 Jenkins 项目中,查看由测试事件触发的 build(位于构建历史记录中)。

  5. 发送第一个测试交付内容后,您还可以在 Secure Source Manager 网络钩子页面的近期交付内容部分中查看测试交付内容的请求响应

后续步骤