本页介绍了如何将 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 访问令牌。
创建一个具有代码库管理员范围的访问令牌,用于与代码库建立连接和断开连接。
创建一个具有代码库读取范围的访问令牌,以确保 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,也可以指定其他项目。
选择您的服务对应的项目。您可以接受预先填充的项目,选择在其他项目中进行浏览,或选择手动输入。
如果您选择此选项,请输入以下信息:
Project(项目):输入或从下拉菜单中选择您的 Google Cloud项目 ID。
区域:此字段会预先选择连接所在的区域。为您的服务指定的区域必须与与您的连接关联的区域一致。
命名空间:选择服务的命名空间。
服务:选择您命名空间中的服务名称。
在 HTTP 访问令牌部分中,输入以下信息:
管理员访问令牌:输入具有 repository admin 范围访问权限的令牌。此令牌用于与代码库建立连接和断开连接。
读取访问令牌:输入具有 repository read 范围访问权限的令牌。Cloud Build 触发器使用此令牌访问代码库中的源代码。
点击连接。
点击 Connect(连接)按钮后,您的个人访问令牌会安全地存储在 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=-
如果您将 Secret 存储在与计划用于创建主机连接的项目不同的项目中,请运行以下命令,向您的项目授予对 Cloud Build 服务代理的访问权限: Google Cloud
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。
现在,您可以继续将 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 secret_data = "WEBHOOK_SECRET_VALUE" } data "google_iam_policy" "p4sa-secretAccessor" { binding { role = "roles/secretmanager.secretAccessor" members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"] } } 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 是您的 Webhook Secret 的名称。
- WEBHOOK_SECRET_VALUE 是 WEBHOOK_SECRET_NAME 的值。
- REGION 是连接的地区。
- CONNECTION_NAME 是连接的名称。
- BITBUCKET_URI 是 Bitbucket 数据中心实例的 URI。
后续步骤
- 了解如何关联 Bitbucket 数据中心代码库。
- 了解如何在 Compute Engine 上执行蓝绿部署。