本页面介绍了如何连接到 Bitbucket Cloud 主机 到 Cloud Build
准备工作
-
启用 Cloud Build, Secret Manager, and Compute Engine API。
- 确保源代码位于 Bitbucket Cloud 代码库中
- 确保 Bitbucket Cloud 源代码库具有
Dockerfile
或 Cloud Build 配置文件。 - 安装 Google Cloud CLI 以使用
gcloud
命令。
必需的 IAM 权限
如需获取连接所需的权限,
请让管理员授予您
Cloud Build Connection Admin (cloudbuild.connectionAdmin
)
针对用户账号的 IAM 角色。
如需详细了解如何授予角色,请参阅管理访问权限。
创建 Bitbucket Cloud 访问令牌
在 Bitbucket Cloud 中创建以下两个访问令牌:
- 管理员访问令牌 - 用于连接和断开连接 代码库
- 读取访问令牌 - 允许 Cloud Build 访问您的来源 代码。
如需创建这些令牌,请按以下步骤操作:
登录 Bitbucket Cloud。
按照 Bitbucket Cloud 说明 创建与您的代码库关联的访问令牌, project 或 workspace。
授予以下权限:
管理员访问令牌:
- 代码库:Read 和 Admin
- 拉取请求:Read
- 网络钩子:Read 和 Write
读取访问令牌:
- 代码库:Read
复制令牌以便在以下步骤中使用。
连接到 Bitbucket Cloud 主机
控制台
完成 操作步骤:
打开 Google Cloud 控制台中的制品库页面。
您将看到代码库页面。
在项目选择器中,选择您的 Google Cloud 项目。
在页面顶部,选择第 2 代标签页。
点击创建主机连接,将新主机连接到 Cloud Build。
选择 Bitbucket 作为来源提供方。
在 Configure Connection 部分,输入以下信息:
点击连接。
新连接会显示在代码库页面中。
gcloud
要存储您的凭据,请完成以下步骤:
将访问令牌存储在 Google Cloud 的 Secret Manager 中 来创建项目:
echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=- echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-
其中:
- ADMIN_TOKEN 是您的管理员访问令牌。
- ADMIN_SECRET_NAME 是您要为之指定的名称 Secret Manager 中的管理员访问令牌密钥。
- READ_TOKEN 是您的读取访问令牌。
- READ_SECRET_NAME 是您要为 在 Secret Manager 中读取访问令牌 Secret。
在 Secret Manager 中创建 webhook Secret 方法是运行以下命令,其中 WEBHOOK_SECRET_NAME 是您要为 webhook Secret 指定的名称:
echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
如果您的密钥不在同一个项目中,请授予对 Cloud Build 服务账号:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_ACCOUNT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud secrets add-iam-policy-binding ADMIN_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding READ_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding WEBHOOK_SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \ --role="roles/secretmanager.secretAccessor"
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- ADMIN_SECRET_NAME 是您 管理员令牌密钥。
- READ_SECRET_NAME 是您 读取令牌密钥。
- WEBHOOK_SECRET_NAME 是您 webhook Secret。
使用 以下命令:
gcloud builds connections create bitbucket-cloud CONNECTION_NAME \ --workspace=WORKSPACE_ID \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_SECRET_NAME/versions/latest \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_SECRET_NAME/versions/latest \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET_NAME/versions/1
其中:
Terraform
您可以使用以下命令将 Bitbucket Cloud 主机连接到 Cloud Build: Terraform。
在以下示例中,代码段将执行以下操作:
- 配置 Terraform Google 提供程序。
- 创建 Secret Manager Secret 以存储 Bitbucket 令牌。
- 向 Cloud Build 授予必要的权限 每个项目、每个项目的服务账号 (P4SA) 来访问 Secret。
创建 Bitbucket Cloud 连接。
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the P4SA 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 and add the repository resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_cloud_config { workspace = "WORKSPACE_ID" 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 是您的令牌名称,
webhook
、repository
、repository:admin
和pullrequest
范围访问权限。 - ADMIN_TOKEN_VALUE是指 ADMIN_TOKEN_NAME。
- READ_TOKEN_NAME 是您的令牌名称,
repository:read
范围。 - READ_TOKEN_VALUE是指 READ_TOKEN_NAME。
- WEBHOOK_SECRET_NAME 是网络钩子密钥的名称。
- WEBHOOK_SECRET_VALUE是指 WEBHOOK_SECRET_NAME。
- REGION 是以下各项的区域: 您的连接。
- CONNECTION_NAME 是连接的名称。
- WORKSPACE_ID 是 Bitbucket 的工作区 ID Cloud Repository。
后续步骤
- 了解如何连接到 Bitbucket Cloud 代码库。
- 了解如何查看构建结果。
- 了解如何在 Compute Engine 上执行蓝绿部署。