本页面介绍如何将 Bitbucket 数据中心主机连接到 Cloud Build。
准备工作
-
Enable the Cloud Build and Secret Manager APIs.
- 在 Bitbucket 数据中心代码库中准备好源代码。
- Bitbucket 数据中心源代码库中包含
Dockerfile
或 Cloud Build 配置文件。 - 如果您尚未安装 Bitbucket 数据中心实例,请参阅安装 Bitbucket 数据中心。
如需使用此页面上的
gcloud
命令,请安装 Google Cloud CLI。
必需的 IAM 权限
- 如需获得连接 Bitbucket 数据中心主机所需的权限,请让您的管理员为您授予用户账号的 Cloud Build Connection Admin (
roles/cloudbuild.connectionAdmin
) IAM 角色。如需详细了解如何授予角色,请参阅“管理访问权限”。
您也可以通过自定义角色或其他预定义角色来获取所需的权限。
- 如果您的 Bitbucket 数据中心实例托管在专用网络中,请参阅在专用网络中从 Bitbucket 数据中心构建代码库,了解在连接主机之前所需的其他 IAM 角色。
连接到 Bitbucket 数据中心主机
在为 Bitbucket 数据中心实例创建主机连接之前,您必须在 Bitbucket 数据中心中创建个人访问令牌,方法是完成以下步骤:
登录 Bitbucket 数据中心实例。
按照说明为您的用户账号创建 HTTP 访问令牌。
创建具有代码库管理员范围的访问令牌,用于与代码库建立连接和断开连接。
创建具有 repository read 范围的访问令牌,以确保 Cloud Build 代码库可以访问代码库中的源代码。
控制台
如需将 Bitbucket 数据中心主机连接到 Cloud Build,请执行以下操作:
在 Google Cloud 控制台中打开代码库页面。
您将看到代码库页面。
在页面顶部,选择第 2 代标签页。
在顶部栏的项目选择器中,选择您的 Google Cloud 项目。
点击创建主机连接,将新主机连接到 Cloud Build。
在左侧面板中,选择 Bitbucket 作为您的来源提供方。
在配置连接部分中,输入以下信息:
区域:为连接选择一个区域。您必须指定一个区域。您的连接无法全局存在。
名称:输入连接的名称。
在主机详细信息部分,选择或输入以下信息:
Bitbucket 主机:选择 Bitbucket 数据中心作为主机。
主机网址:输入 Bitbucket 数据中心主机的网址。
在网络部分中,选择以下选项之一:
公共互联网:如果您的实例可通过公共互联网访问,请选择此选项。
专用网络:如果您的实例托管在专用网络上,请选择此选项。
CA 证书:您的自签名证书。点击浏览,从本地机器打开证书。
您的证书大小不得超过 10 KB,并且应采用 PEM 格式(
.pem
、.cer
或.crt
)。如果您将此字段留空,Cloud Build 将使用一组默认证书中的证书。在 Service Directory 服务部分中,选择服务的位置。您可以接受预先填充的项目 ID,也可以指定其他项目。
选择服务的项目。您可以接受预填充的项目,也可以选择在其他项目中以进行浏览,还可以选择手动输入。
如果您选择,请输入以下信息:
项目:输入您的 Google Cloud项目 ID,或从下拉菜单中选择您的项目 ID。
区域:此字段会预先选择连接所在的区域。为服务指定的区域必须与关联的连接所对应的区域一致。
命名空间:选择服务的命名空间。
服务:选择命名空间中的服务名称。
在 HTTP 访问令牌部分中,输入以下信息:
管理员访问令牌:输入具有 repository admin 范围访问权限的令牌。此令牌用于与代码库建立连接和断开连接。
读取访问令牌:输入具有 repository read 范围访问权限的令牌。Cloud Build 触发器使用此令牌访问代码库中的源代码。
点击连接。
点击关联按钮后,您的个人访问令牌会安全地存储在 Secret Manager 中。连接到 Bitbucket 数据中心主机后,Cloud Build 会代表您创建网络钩子密钥。您可以在 Secret Manager 页面上查看和管理 Secret。
gcloud
运行以下命令,在 Secret Manager 中创建网络钩子 Secret,其中 WEBHOOK_SECRET 是您要为网络钩子 Secret 指定的名称:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data
-file=-如果您将密钥存储在不同于计划用于创建主机连接的 Google Cloud 项目中,请运行以下命令,以向您的项目授予对 Cloud Build 服务代理的访问权限:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcpiam.gserviceaccount.com-sa-cloudbuild." gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \ \ --rol
e="roles/secretmanager.admin"其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
现在,您可以继续将 Bitbucket 数据中心主机连接到 Cloud Build。
运行以下命令以创建 Bitbucket 数据中心连接:
gcloud builds connections create bitbucket-data-center CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_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 ``` Where:
Terraform
您可以使用 Terraform 将 Bitbucket 数据中心主机连接到 Cloud Build。
在以下示例中,相应代码段会执行以下操作:
- 配置 Terraform Google 提供商。
- 创建 Secret Manager Secret 以存储 Bitbucket 令牌。
- 向 Cloud Build 服务代理授予访问 Secret 所需的权限。
创建 Bitbucket 数据中心连接。
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "admin-token-secret" { project = "PROJECT_ID" secret_id = "ADMIN_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "admin-token-secret-version" { secret = google_secret_manager_secret.admin-token-secret.id secret_data = "ADMIN_TOKEN_VALUE" } resource "google_secret_manager_secret" "read-token-secret" { project = "PROJECT_ID" secret_id = "READ_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "read-token-secret-version" { secret = google_secret_manager_secret.read-token-secret.id secret_data = "READ_TOKEN_VALUE" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "webhook-secret-secret-version" { secret = google_secret_manager_secret.webhook-secret-secret.id siam.gserviceaccount.comecret_data = "WEBHOOK_SECRET_VALUE" } data "google_iam_policy" "p4sa-secretAccessor" { binding { role = "roles/secretmanager.secretAccessor" members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild."] } } resource "google_secret_manager_secret_iam_policy" "policy-pak" { project = google_secret_manager_secret.admin-token-secret.project secret_id = google_secret_manager_secret.admin-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { project = google_secret_manager_secret.read-token-secret.project secret_id = google_secret_manager_secret.read-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-whs" { project = google_secret_manager_secret.webhook-secret-secret.project secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } // Create the connection resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_data_center_config { host_uri = "BITBUCKET_URI" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id } read_authorizer_credential { user_token_secret_version =
google_secret_manager_secret_version.read-token-secret-version.id } webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id } depends_on = [ google_secret_manager_secret_iam_policy.policy-pak, google_secret_manager_secret_iam_policy.policy-rpak, google_secret_manager_secret_iam_policy.policy-whs ] }
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- PROJECT_NUMBER 是您的 Google Cloud 项目编号。
- ADMIN_TOKEN_NAME 是具有
repository:admin
范围的令牌的名称。 - ADMIN_TOKEN_VALUE 是 ADMIN_TOKEN_NAME 的值。
- READ_TOKEN_NAME 是具有
repository:read
范围的令牌的名称。 - READ_TOKEN_VALUE 是 READ_TOKEN_NAME 的值。
- WEBHOOK_SECRET_NAME 是您的网络钩子 Secret 的名称。
- WEBHOOK_SECRET_VALUE 是 WEBHOOK_SECRET_NAME 的值。
- REGION 是连接的地区。
- CONNECTION_NAME 是 Cloud Build 中 Bitbucket 数据中心主机连接的名称。
- BITBUCKET_URI 是 Bitbucket 数据中心实例的 URI。
后续步骤
- 了解如何关联 Bitbucket 数据中心代码库。
- 了解如何在 Compute Engine 上执行蓝绿部署。