您可以使用 Jenkins 触发器和 Secure Source Manager Webhook 启动自动构建。
所需角色
如需获得创建 Jenkins 构建触发器所需的权限,请让管理员向您授予以下 IAM 角色:
- Secure Source Manager Repo Admin (
roles/securesourcemanager.repoAdmin) 在您的代码库上 - Secure Source Manager 实例的 Secure Source Manager Instance Accessor (
roles/securesourcemanager.instanceAccessor)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
如需了解如何授予 Secure Source Manager 角色, 请参阅 使用 IAM 进行访问权限控制 和 向用户授予实例访问权限。
设置 Webhook 触发器
Jenkins 使用构建触发器插件来启用 CI/CD 自动化。您可以配置触发器以侦听传入的事件(例如,将新提交推送到代码库或者启动拉取请求时),然后在收到新事件时自动执行构建。您还可以将触发器配置为在源代码库发生任何更改时构建代码,或者仅在更改符合特定条件时构建代码。
如需设置通用 Jenkins Webhook 触发器,请执行以下操作:
在 Jenkins 服务器上安装 Jenkins Git 插件、 SSH 凭据插件 和 Generic Webhook Trigger 插件 。
在 Jenkins 服务器中生成有效的 SSH 密钥对。 Secure Source Manager 仅支持 RSA 类型的密钥。
运行以下命令,将 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,将实例网域添加到已知主机列表中。在 Jenkins Manage Credentials (管理凭据)页面中:
- 选择 SSH username with private key (SSH 用户名与私钥)。
- 粘贴 Jenkins 服务器 SSH 私钥。
- 在 Kind (种类)下拉菜单中,根据需要填写其他字段。
点击创建 。
在 Jenkins 网页界面中,创建一个新的 Jenkins 作业。
在 Jenkins 作业的配置页面中,在 Source Code Management (源代码管理)部分下,选择 Git 。
在 Git 部分中,粘贴 Secure Source Manager 代码库 SSH 网址作为代码库网址,输入构建分支(例如
*/main),然后选择之前在 Manage Credentials (管理凭据)页面中添加的已保存的 SSH 私钥凭据。在 Build Triggers (构建触发器)部分中,选择 Generic Webhook Trigger (通用 Webhook 触发器)。
(可选)您可以添加令牌,以便仅在调用时提供该令牌时触发作业。如需添加令牌,您可以在 Generic Webhook Trigger (通用 Webhook 触发器)部分下的 Token (令牌)字段中输入令牌。
在 Build (构建)部分中,提供您希望此 Jenkins 作业使用的构建脚本。例如,您可以执行
cat README.md以输出 README.md 的内容。点击保存 以创建 Jenkins 作业。
设置服务帐号并授予所需权限
如果您还没有要使用的服务帐号, 请创建一个服务账号。
确保您对服务账号拥有
iam.serviceAccounts.actAs权限。此权限是 Service Account User (roles/iam.serviceAccountUser) 角色的组成部分。在 Secure Source Manager 网页界面中,点击 更多选项 菜单。
点击 Service account SSH keys (服务账号 SSH 密钥)。系统会打开 Service account SSH keys (服务账号 SSH 密钥)页面,并显示您添加的所有现有密钥的列表。
点击添加密钥 。
在 Add SSH key (添加 SSH 密钥)页面中,为您的密钥输入以下值:
Service account(服务账号):您希望在其中使用 SSH 密钥的服务账号的服务帐号电子邮件地址,格式为
SA_NAME@PROJECT_ID.iam.gserviceaccount.com其中
SA_NAME是服务帐号名称。PROJECT_ID是创建服务账号的项目 ID。
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 实例位于同一项目中,请跳至 向服务帐号授予代码库角色。
运行以下命令,获取服务帐号的现有 IAM 政策:
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \ --format json其中 SERVICE_ACCOUNT 是您要使用的服务帐号。 账号应采用数字服务帐号 ID 或电子邮件地址格式,例如:
123456789876543212345或my-iam-account@somedomain.com。输出内容包括任何现有绑定,或者,如果不存在任何绑定,则包括类似于以下内容的
etag值:{ "etag": "BwUjHYKJUiQ=" }将输出内容复制到名为
policy.json的新文件中。如需向 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 实例的项目编号。运行以下命令,替换服务帐号的现有 IAM 政策:
gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILE替换以下内容:
- 将 SERVICE_ACCOUNT 替换为服务帐号 ID 或电子邮件地址。
- 将 POLICY_FILE 替换为 JSON 格式文件的位置和名称,包括新政策。
向服务帐号授予代码库角色
- 在 Secure Source Manager 网页界面中,前往您要向服务帐号授予权限的代码库。
- 点击权限 标签页。
- 点击 Add Users (添加用户)。
- 在 Add principal (添加主账号)字段中,输入服务帐号电子邮件地址。
- 在角色 下拉菜单中,选择 Secure Source Manager Repository Reader (Secure Source Manager 代码库读取器)。
运行以下命令,为服务帐号分配
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
- 在 Secure Source Manager 网页界面中,前往您要为其创建 Webhook 的代码库。
- 点击设置 。
- 点击 Webhooks ,然后点击 Add webhook 。
在 Hook ID (钩子 ID)字段中,输入 Webhook 的 ID。
在 Target 网址 (目标网址)字段中,输入 Jenkins 触发器网址。
如果您在配置 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 (敏感查询字符串)字段。在 Trigger on (触发条件)部分中,选择以下选项之一:
- Push(推送):在向代码库推送时触发。
- Pull request state changed(拉取请求状态已更改):在拉取请求状态发生更改时触发。
如果您选择了 Push(推送),则可以在 Branch filter(分支过滤器)字段中输入推送事件的许可名单。
Branch filter (分支过滤器)字段使用 glob 模式,只有对匹配的分支执行的操作才会导致构建触发器。如果该字段为空或
*,则系统会报告所有分支的推送事件。点击 Add webhook 。
Webhook 会显示在 Webhooks (Webhook)页面中。
测试 Webhook
- 在 Secure Source Manager Webhooks (Webhook)页面中,点击要测试的 Webhook。
前往页面底部,然后点击 Test delivery (测试传送)。
系统会将一个虚假事件添加到传送队列中。该事件可能需要几秒钟才会显示在传送记录中。
您还可以使用
git命令推送或合并拉取请求来测试 Webhook。在 Jenkins 项目中,在 Build History (构建记录)中查看由测试事件触发的构建。
在发送第一个测试传送后,您还可以在 Secure Source Manager Webhook 页面的 Recent deliveries (最近传送)部分中查看测试传送的请求 和响应 。
后续步骤
- 浏览 Jenkins 文档。