本页介绍如何将 GitLab 主机 连接到 Cloud Build。
准备工作
启用 Cloud Build 和 Secret Manager API。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您 创建了项目,则可能已通过 所有者角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色。
连接到 GitLab 主机
在为 GitLab 实例创建主机连接之前,您必须在 GitLab 中创建个人访问令牌,方法是完成以下步骤:
登录您的 GitLab 实例。
在您的实例的 GitLab 页面上,点击右上角的头像。
点击修改个人资料 。
在左侧边栏中,选择访问令牌 。
您会看到“个人访问令牌”页面。
创建具有
api范围的访问令牌,用于与代码库建立连接和断开连接。创建具有
read_api范围的访问令牌,以确保 Cloud Build 代码库可以访问代码库中的源代码。
控制台
如需将 GitLab 主机连接到 Cloud Build,请执行以下操作:
在 Google Cloud 控制台中打开代码库页面。
您会看到代码库 页面。
在页面顶部,选择第 2 代 标签页。
在顶部栏的项目选择器中,选择您的 Google Cloud 项目。
点击创建主机连接 ,将新主机连接到 Cloud Build。
在左侧面板中,选择 GitLab 作为您的来源提供方。
在配置连接 部分中,输入以下信息:
区域:为您的连接选择一个区域。
名称:输入连接的名称。
在主机详细信息 部分中,前往 GitLab 主机 ,然后选择 GitLab.com 。
可选:如果您想管理用于加密 GitLab 代码库的访问令牌的加密密钥,请前往加密 部分,然后选择 Cloud Key Management Service 密钥。 如需了解详情,请参阅 为 Secret Manager 启用客户管理的加密密钥。
在个人访问令牌 部分中,输入以下信息:
API 访问令牌:输入具有
api范围访问权限的令牌。此令牌用于与代码库建立连接和断开连接。读取 API 访问令牌:输入具有
read_api范围 访问权限的令牌。Cloud Build 触发器使用此令牌来访问代码库中的源代码。
点击连接 。
点击连接按钮后,您的个人访问令牌将 安全地存储在Secret Manager中。 连接主机后,Cloud Build 还会代表您创建网络钩子 Secret。您可以在 Secret Manager 页面上查看和管理 Secret。
您现在已成功创建 GitLab 连接。
gcloud
在将 GitLab 主机连接到 Cloud Build 之前,请完成以下步骤来存储您的凭据:
在 Secret Manager 中创建网络钩子 Secret,方法是运行 以下命令:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-如果您将 Secret 存储在不同 Google Cloud 于计划用于创建主机连接的项目中,请输入以下命令,以授予您的项目对 Cloud Build 服务代理的访问权限:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild." 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,请执行以下操作:
输入以下命令以创建 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 是您的网络钩子 Secret。
您现在已成功创建 GitLab 连接。
轮替旧的或过期的 GitLab 访问令牌
轮替您的访问令牌,以便 Cloud Build 主机连接可以保持与 GitLab 代码库的连接。 如果您的 GitLab 访问令牌过期,则 Cloud Build 主机连接会与 GitLab 代码库断开连接。发生这种情况时,您无法停用连接或关联代码库,除非您轮替过期的令牌。此外,在以下情况下,您会看到错误:
连接的连接详情 页面会显示一条错误消息,指出
Connection is disconnected due to an invalid or expired access token。如果您尝试将代码库关联到具有过期令牌的连接,则会看到无效的访问令牌 消息。点击查看连接 会将您带到具有过期令牌的连接的连接详情 页面。
Cloud Build 允许您轮替访问令牌,方法是输入新的令牌值,并将其保存在这些令牌的最新 Secret 版本中的 Secret Manager 中。如需轮替访问令牌,请执行以下操作:
在 GitLab 中轮替每个访问令牌:
前往连接到 Cloud Build 主机连接的 GitLab 代码库。
按照 GitLab 文档中的说明 轮替访问令牌。 轮替令牌时,GitLab 会使用新凭据创建新令牌,并使该令牌的先前版本失效。轮替后的令牌具有与原始令牌相同的权限和范围。
复制轮替后的令牌的 ID。
在 Cloud Build 中更新访问令牌:
前往连接的连接详情 页面。
选择更新访问令牌 。
在令牌轮替 菜单中,在 API 访问令牌 和读取访问令牌 字段中输入新令牌。
(可选):如果您希望连接始终使用令牌的最新 Secret 版本,请选择更新连接以始终使用最新版本 。如果您的连接使用特定的 Secret 版本号,则不选择此选项可能会很有用。
选择更新 以保存更改。
Cloud Build 会将新的访问令牌作为 Secret 的最新版本保存在 Secret Manager 中。
后续步骤
- 了解如何连接 GitLab 代码库。
- 了解如何在 GitLab 管道中使用 Google 管理的 CI/CD 组件来构建和部署工作负载 Google Cloud 。请参阅 GitLab on Google Cloud。