借助 Cloud Build,您可以创建触发器,以便从 托管在 GitLab Enterprise Edition 上的代码库进行构建。 您可以执行构建,以响应与 GitLab Enterprise Edition 代码库关联的事件,例如提交推送或合并请求。
本页面介绍了如何为 GitLab Enterprise Edition 实例启用构建触发器。如需了解详情,请参阅 Cloud Build 触发器和 Cloud Build 代码库。
准备工作
按照说明连接到 GitLab Enterprise Edition 主机。启用 Cloud Build 和 Secret Manager API。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您 创建了项目,则可能已通过 所有者角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色。
如需为 GitLab Enterprise Edition 代码库创建触发器,您必须在 与代码库之间建立连接 Google Cloud 。如需通过 中的 GitLab Enterprise Edition 应用创建连接,请参阅 连接到 GitLab Enterprise Edition 代码库。 Google Cloud
创建 GitLab Enterprise Edition 触发器
本部分介绍如何创建触发器并将其与 GitLab Enterprise 安装关联。
Google Cloud 控制台
如需使用 Google Cloud 控制台创建 GitLab Enterprise Edition 触发器,请执行以下操作:
打开触发器 页面:
从页面顶部选择您的 Google Cloud 项目,然后点击打开。
点击创建触发器 。
输入以下触发器设置:
名称:触发器的名称。
区域:为触发器选择区域。
- 如果与触发器关联的构建配置文件指定了 专用池,则 Cloud Build 会使用专用池来运行构建。在这种情况下,您在触发器中指定的区域必须与您创建专用池的区域相匹配。
- 如果与触发器关联的构建配置文件未 指定专用池,则 Cloud Build 会使用默认 池在与触发器相同的区域中运行构建。
说明 (可选):触发器的说明。
事件:选择用于调用触发器的代码库事件。
推送到分支:设置触发器,以便基于对特定分支的提交启动构建。
推送新标记:将触发器设置为以基于包含特定标记的提交启动构建。
拉取请求:设置触发器,以便基于对合并请求的提交启动构建。
来源:配置有关 GitLab Enterprise Edition 代码库的信息:
代码库服务:选择 Cloud Build。
代码库生成:选择第 2 代 作为来源。
代码库:从可用代码库列表中,选择 代码库。
分支或标记:指定要匹配分支或 标记值的正则表达式。如需了解可接受的正则表达式语法, 请参阅 RE2 语法。
评论控制:如果您选择了拉取请求 作为您的事件,请选择以下选项之一来 控制构建是否将由触发器自动执行:
必需(所有者和协作者除外):代码库所有者或协作者创建或更新拉取请求后,触发器会自动执行构建。如果外部贡献者发起操作,则只有在所有者或协作者对拉取请求中的
/gcbrun添加评论之后,触发器才会执行构建。必需:任何 贡献者创建或更新拉取请求后,只有在所有者或 协作者对拉取请求中的
/gcbrun添加评论之后,触发器才会执行构建。每次对拉取请求进行更改时,系统都会执行构建。不需要:任何 贡献者创建或更新拉取请求后,触发器将自动执行构建。
配置:选择位于 您的代码库中的构建配置文件,或在 触发器上以内嵌方式配置构建。
类型:选择要用于构建的配置类型。
- Cloud Build 配置文件(yaml 或 json):为您的配置使用构建配置文件。
- Dockerfile:为您的配置使用
Dockerfile。
位置:为您的配置指定位置。
代码库:如果您的配置文件位于 代码库中,请提供 构建配置文件的位置或
Dockerfile目录,并为生成的映像提供名称。如果您的配置是Dockerfile,则还可以选择提供构建的超时时间。 提供了Dockerfile和映像名称后,您会看到构建将执行的docker build命令的预览。内嵌:如果您选择了 Cloud Build 配置文件(yaml 或 json)作为 配置选项,则可以指定内嵌构建配置。点击打开编辑器 ,使用 YAML 或 JSON 语法在 Google Cloud 控制台中编写您的构建配置文件。点击完成 以保存您的构建配置。
点击创建 以创建 GitLab Enterprise Edition 触发器。
gcloud CLI
如需使用 gcloud 命令创建 GitLab Enterprise Edition 触发器,请运行以下命令:
gcloud builds triggers create gitlab \
--name=TRIGGER_NAME \
--repository=projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME \
--branch-pattern=BRANCH_PATTERN # or --tag-pattern=TAG_PATTERN \
--build-config=BUILD_CONFIG_FILE \
--region=REGION \
--service-account=SERVICE-ACCOUNT
其中:
- TRIGGER_NAME 是触发器的名称。
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- REGION 是您的触发器的 区域。
- CONNECTION_NAME 是 GitLab Enterprise Edition 连接的名称。
- REPO_NAME 是代码库的名称
- BRANCH_PATTERN 是代码库中要在其上调用构建的分支名称。
- TAG_PATTERN 是代码库中要在其上调用构建的标记名称。
- BUILD_CONFIG_FILE 是构建 配置文件的路径。
- SERVICE-ACCOUNT 是用于触发器和构建操作的服务帐号 。
API
如需使用 API 创建 GitLab Enterprise Edition 触发器,请使用以下 JSON 模板:
{
"filename": "cloudbuild.yaml",
"name": "curl-trigger",
"description": "curl trigger",
"repository_event_config": {
"repository": "REPO_NAME",
"repository_type": "GITLAB_ENTERPRISE",
// Field filter must be only one of the following:
"pullRequest": "PULL_REQUEST_FILTER",
"push": "PUSH_FILTER"
}
}
其中:
- "REPO_NAME" 是您在 Cloud Build 中配置的代码库 连接的名称。
- "PULL_REQUEST_FILTER" 是
PullRequestFilter的实例,用于定义过滤器 ,以便在 GitLab Enterprise Edition 中发出匹配的 拉取请求时,Cloud Build 可以触发构建。 - "PUSH_FILTER" 是
PushFilter的实例,用于定义过滤器 ,以便在 GitLab Enterprise Edition 中发出匹配的 推送时,Cloud Build 可以触发构建。
在终端中输入以下 curl 命令:
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/triggers -d @trigger.json
其中:
- PROJECT_NUMBER 是您的 Google Cloud 项目编号。
- PROJECT_ID 是您的 Google Cloud 项目 ID。
数据共享
从 Cloud Build 发送到 GitLab Enterprise Edition 的数据有助于您按名称识别触发器,并在 GitLab Enterprise Edition 代码库中查看构建结果。
Cloud Build 和 GitLab Enterprise Edition 主机之间共享以下数据:
- Google Cloud 项目 ID
- 触发器名称