连接到 GitLab 主机

本页介绍了如何将 GitLab 主机连接到 Cloud Build。

准备工作

  • 启用 Cloud Build 和 Secret Manager API(如果尚未启用)。

    启用 API 所需的角色

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

    启用 API

连接到 GitLab 主机

在为 GitLab 实例创建主机连接之前,您必须在 GitLab 中创建个人访问令牌,方法是完成以下步骤:

  1. 登录您的 GitLab 实例。

  2. 在您实例的 GitLab 页面上,点击右上角的头像。

  3. 点击修改个人资料。

  4. 在左侧边栏中,选择访问令牌。

    系统会显示个人访问令牌页面。

  5. 创建具有 api 范围的访问令牌,用于与代码库建立连接和断开连接。

  6. 创建具有 read_api 范围的访问令牌,以确保 Cloud Build 代码库可以访问代码库中的源代码。

控制台

如需将 GitLab 主机连接到 Cloud Build,请执行以下操作:

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

    您会看到代码库页面。

  2. 选择页面顶部的第 2 代标签页。

  3. 在顶部栏的项目选择器中,选择您的 Google Cloud 项目。

  4. 点击创建主机连接,将新主机连接到 Cloud Build。

  5. 在左侧面板中,选择 GitLab 作为您的来源提供方。

  6. 在配置连接部分中,输入以下信息:

    • 区域:为连接选择一个区域。

    • 名称:输入连接的名称。

  7. 在主机详情部分,前往 GitLab 主机,然后选择 GitLab.com。

  8. 可选:如果您想管理用于加密 GitLab 代码库的访问令牌的加密密钥,请前往加密部分,然后选择 Cloud Key Management Service 密钥。如需了解详情,请参阅为 Secret Manager 启用客户管理的加密密钥。

  9. 在个人访问令牌部分中,输入以下信息:

    • API 访问令牌:输入具有 api 范围访问权限的令牌。此令牌用于与代码库建立连接和断开连接。

    • 读取 API 访问令牌:输入具有 read_api 范围访问权限的令牌。Cloud Build 触发器使用此令牌访问代码库中的源代码。

  10. 点击连接。

    点击关联按钮后,您的个人访问令牌会安全地存储在 Secret Manager 中。建立主机连接后,Cloud Build 还会代表您创建网络钩子密钥。您可以在 Secret Manager 页面上查看和管理 Secret。

您已成功创建 GitLab 连接。

gcloud

在将 GitLab 主机连接到 Cloud Build 之前,请完成以下步骤来存储您的凭据:

  1. 将令牌存储在 Secret Manager 中。

  2. 运行以下命令,在 Secret Manager 中创建 webhook Secret:

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. 如果您将密钥存储在不同于计划用于创建宿主连接的 Google Cloud 项目中的项目中,请运行以下命令,以授予您的项目对 Cloud Build 服务代理的访问权限:

    PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
      --role="roles/secretmanager.admin"
    

    其中:

    • PROJECT_ID 是 Google Cloud 项目 ID。

您现在可以继续将 GitLab 主机连接到 Cloud Build。

请完成以下步骤:

如需将 GitLab 主机连接到 Cloud Build,请执行以下操作:

  1. 输入以下命令以创建 GitLab 连接:

    gcloud builds connections create gitlab CONNECTION_NAME \
      --host-uri=HOST_URI \
      --project=PROJECT_ID \
      --region=REGION \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_TOKEN/versions/SECRET_VERSION \
      --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \
      --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION
    

    其中:

    • CONNECTION_NAME 是您在 Cloud Build 中为 GitLab 主机连接指定的名称。
    • HOST_URI 是您的 GitLab 实例的 URI。例如 https://my-gle-server.net。
    • PROJECT_ID 是 Google Cloud 项目 ID。
    • REGION 是连接的区域。
    • API_TOKEN 是具有 api 范围的令牌的名称。
    • READ_TOKEN 是具有 read_api 范围的令牌的名称。
    • SECRET_VERSION 是相应 Secret 的版本。
    • WEBHOOK_SECRET 是您的 Webhook 密钥。

您已成功创建 GitLab 连接。

轮换旧的或过期的 GitLab 访问令牌

轮换访问令牌,以便 Cloud Build 主机连接能够保持与 GitLab 代码库的连接。 如果您的 GitLab 访问令牌过期,Cloud Build 主机连接就会与相应的 GitLab 代码库断开。发生这种情况时,您无法停用连接或关联代码库,除非您轮换已过期的令牌。此外,在以下情况下,您会看到错误:

  • 相应连接的连接详情页面会显示一条错误消息,指出 Connection is disconnected due to an invalid or expired access token。

  • 如果您尝试将代码库与令牌已过期的连接相关联,则会看到访问令牌无效消息。点击查看连接后,系统会将您带到令牌已过期的连接的连接详情页面。

Cloud Build 可让您通过输入新的令牌值并将其保存在 Secret Manager 中作为这些令牌的最新 Secret 版本来轮换访问令牌。如需轮换访问令牌,请执行以下操作:

  1. 在 GitLab 中轮换每个访问令牌:

    1. 前往与 Cloud Build 主机连接关联的 GitLab 代码库。

    2. 按照 GitLab 文档中的说明轮换访问令牌。 轮换令牌时,GitLab 会创建具有新凭据的新令牌,并使该令牌的先前版本失效。轮换后的令牌与原始令牌具有相同的权限和范围。

    3. 复制已轮换的令牌的 ID。

  2. 在 Cloud Build 中更新访问令牌:

    1. 前往相应连接的连接详情页面。

    2. 选择更新访问令牌。

    3. 在令牌轮换菜单中,在 API 访问令牌和读取访问令牌字段中输入新令牌。

    4. (可选):如果您希望连接始终使用令牌的最新版密钥,请选择更新连接以始终使用最新版本。如果您的连接使用特定的密钥版本号,则取消选中此选项可能会有所帮助。

    5. 选择更新以保存更改。

      Cloud Build 会将新的访问令牌保存为 Secret Manager 中 Secret 的最新版本。

如需了解详情,请参阅 GitLab 文档中的访问令牌过期。

后续步骤