从 GitLab 构建代码库

借助 Cloud Build,您可以创建触发器,以便通过 GitLab上托管的代码库进行构建。 您可以执行构建来响应与 GitLab 代码库关联的提交推送或合并请求等事件。

本页面介绍了如何为 GitLab 实例启用构建触发器。如需了解详情,请参阅 Cloud Build 触发器Cloud Build 代码库

准备工作

按照说明连接到 GitLab 主机
  • 启用 Cloud Build 和 Secret Manager API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    启用 API

如需为 GitLab 代码库创建触发器,您必须在 与 Google Cloud 代码库之间建立连接。如需通过 中的 GitLab 应用创建连接,请参阅 连接到 GitLab 代码库。 Google Cloud

创建 GitLab 触发器

本部分介绍如何创建触发器并将其与 GitLab 安装关联。

Google Cloud 控制台

如需使用 Google Cloud 控制台创建 GitLab 触发器,请执行以下操作:

  1. 打开触发器 页面:

    打开触发器页面

  2. 从页面顶部选择您的 Google Cloud 项目,然后点击打开

  3. 点击创建触发器

  4. 输入以下触发器设置:

    • 名称:触发器的名称。

    • 区域:为触发器选择区域

      • 如果与触发器关联的构建配置文件指定了 专用池,则 Cloud Build 会使用专用池来运行构建。在这种情况下,您在触发器中指定的区域必须与您创建专用池的区域相匹配。
      • 如果与触发器关联的构建配置文件 指定专用池,则 Cloud Build 会使用默认 池在与触发器相同的区域中运行构建。

    • 说明 (可选):触发器的说明。

    • 事件:选择用于调用触发器的代码库事件。

      • 推送到分支:设置触发器,以便基于对特定分支的提交启动构建。

      • 推送新标记:将触发器设置为以基于包含特定标记的提交启动构建。

      • 拉取请求:设置触发器,以便基于对合并请求的提交启动构建。

    • 来源:配置有关 GitLab 代码库的信息:

      • 代码库服务:选择 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 控制台中编写您的构建配置文件。点击完成 以保存您的构建配置。

  5. 点击创建 以创建 GitLab Enterprise Edition 触发器。

gcloud CLI

如需使用 gcloud 命令创建 GitLab 触发器,请运行以下命令:

    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 连接的名称。
  • REPO_NAME 是代码库的名称
  • BRANCH_PATTERN 是代码库中要在其上调用构建的分支名称。
  • TAG_PATTERN 是代码库中要在其上调用构建的标记名称。
  • BUILD_CONFIG_FILE 是构建 配置文件的路径。
  • SERVICE-ACCOUNT 是用于触发器和构建操作的服务帐号 。

API

如需使用 API 创建 GitLab 触发器,请使用以下 JSON 模板:

{
    "filename": "cloudbuild.yaml",
    "name": "curl-trigger",
    "description": "curl trigger",
    "repository_event_config": {
      "repository": "REPO_NAME",
      "repository_type": "GITLAB",
      // Field filter must be only one of the following:
      "pullRequest": "PULL_REQUEST_FILTER",
      "push": "PUSH_FILTER"
    }
}

其中:

  • "REPO_NAME" 是您在 Cloud Build 中配置的代码库 连接的名称。
  • "PULL_REQUEST_FILTER" 是 PullRequestFilter的实例,用于定义 允许 Cloud Build 在 GitLab 中发出匹配的 拉取请求时触发构建的过滤器。
  • "PUSH_FILTER" 是 PushFilter的实例,用于定义允许 Cloud Build 在 GitLab 中发出匹配的 推送时触发构建的过滤器。

在终端中输入以下 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 的数据有助于您按名称识别触发器,并在 GitLab 代码库中查看构建结果。

Cloud Build 和 GitLab 主机之间共享以下数据:

  • Google Cloud 项目 ID
  • 触发器名称

后续步骤