连接到 Jenkins

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

所需角色

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

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

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

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

设置 Webhook 触发器

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 Manage Credentials (管理凭据)页面中:

    1. 选择 SSH username with private key (SSH 用户名与私钥)。
    2. 粘贴 Jenkins 服务器 SSH 私钥。
    3. Kind (种类)下拉菜单中,根据需要填写其他字段。
  5. 点击创建

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

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

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

  9. Build Triggers (构建触发器)部分中,选择 Generic Webhook Trigger (通用 Webhook 触发器)。

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

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

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

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

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

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

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

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

  4. 点击添加密钥

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

    1. Service account(服务账号):您希望在其中使用 SSH 密钥的服务账号的服务帐号电子邮件地址,格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com

      其中

      • SA_NAME 是服务帐号名称。
      • PROJECT_ID 是创建服务账号的项目 ID。
    2. SSH Public Key(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. 点击 Add Users (添加用户)。
  4. Add principal (添加主账号)字段中,输入服务帐号电子邮件地址。
  5. 角色 下拉菜单中,选择 Secure Source Manager Repository Reader (Secure Source Manager 代码库读取器)。
  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 替换为服务帐号电子邮件地址。

设置 Webhook

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

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

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

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

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

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

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

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

    Branch filter (分支过滤器)字段使用 glob 模式,只有对匹配的分支执行的操作才会导致构建触发器。如果该字段为空或 *,则系统会报告所有分支的推送事件。

  9. 点击 Add webhook

  10. Webhook 会显示在 Webhooks (Webhook)页面中。

测试 Webhook

  1. 在 Secure Source Manager Webhooks (Webhook)页面中,点击要测试的 Webhook。
  2. 前往页面底部,然后点击 Test delivery (测试传送)。

    系统会将一个虚假事件添加到传送队列中。该事件可能需要几秒钟才会显示在传送记录中。

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

  4. 在 Jenkins 项目中,在 Build History (构建记录)中查看由测试事件触发的构建。

  5. 在发送第一个测试传送后,您还可以在 Secure Source Manager Webhook 页面的 Recent deliveries (最近传送)部分中查看测试传送的请求响应

后续步骤