连接到 Bitbucket Server 主机

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

准备工作

  • 启用 Cloud Build, Secret Manager, and Compute Engine API。

    启用 API

设置

在连接 Bitbucket Server 主机之前,您必须先获取 API 密钥,以便验证并接受来自 Bitbucket Server 的传入事件。此外,您必须在 Google Cloud 项目中授予 IAM 权限,以在 Bitbucket Server 中创建个人访问令牌,以创建 webhook 和检索代码库数据。

获取 API 密钥

如需连接您的主机并对传入的网络钩子事件进行身份验证,您需要一个 API 密钥。

要获取 API 密钥,请执行以下操作:

  1. 打开 Google Cloud 控制台中的凭据页面:

    打开“凭据”页面

  2. 点击创建凭据

  3. 点击 API 密钥

    您会看到一个对话框,其中含有已创建的 API 密钥。记下您的 API 密钥。

  4. 如果您要对产品应用的密钥进行限制,请点击限制密钥,以完成保护密钥的其他步骤。否则,请点击关闭

    如需了解如何限制密钥,请参阅应用 API 密钥限制

必需的 IAM 权限

如需连接 Bitbucket Server 主机,请向您的用户帐号授予 Cloud Build Editor (roles/cloudbuild.builds.editor) 角色和 Cloud Build Integrations Owner (cloudbuild.integrations.owner) 角色。

如需向您的用户账号添加所需的角色,请参阅配置对 Cloud Build 资源的访问权限。如需详细了解与 Cloud Build 关联的 IAM 角色,请参阅 IAM 角色和权限

创建个人访问令牌

您必须在 Bitbucket Server 中创建两个个人访问令牌以执行以下任务:

这些个人访问令牌是所需的最低权限。您可以根据需要在 Bitbucket Server 中配置其他权限。例如,您可以选择 Bitbucket Server 账号以仅访问 Bitbucket Server 实例上的部分代码库,以便更精细地控制在 Cloud Build 中可用的内容。

创建个人访问令牌后,请妥善保存令牌值以连接到您的 Bitbucket Server 代码库

连接到 Bitbucket Server 主机

控制台

如需使用 Google Cloud 控制台将 Bitbucket Server 主机连接到 Cloud Build,请执行以下操作:

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

    打开“代码库”页面

  2. 在页面顶部,选择第 1 代标签页。

  3. 点击连接主机

  4. 从下拉菜单中选择 Bitbucket Server

    您将看到连接主机面板。

    输入以下信息,将您的 Bitbucket Server 实例关联到 Cloud Build:

    • 区域:选择连接的区域。

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

    1. 主机网址:您的 Bitbucket Server 实例的主机网址。例如 https://bbs.example-test.com:7990

    2. Google Cloud API 密钥:用于对凭据进行身份验证的 API 密钥。

    3. CA 证书:您的自签名证书。您的证书大小不得超过 10 KB,并且应为 PEM 格式(.pem.cer.crt)。如果将此部分留空,则系统将使用默认的证书集

    4. 用户名:您的 Bitbucket Server 账号的用户名。 此账号应拥有对您要与 Cloud Build 连接的代码库的管理员访问权限。

    5. 读取访问令牌:您的 Bitbucket Server 帐号个人访问令牌,具有读取权限。

    6. 管理员访问令牌:您的 Bitbucket Server 帐号个人访问令牌,包含项目和代码库的管理员权限。

    7. 网络类型下,选择以下选项之一:

      1. 公共互联网:如果您的实例可通过公共互联网访问,请选择此选项。

      2. 专用网络:如果您的实例托管在专用网络上,请选择此选项。

        1. Project:选择您的 Google Cloud 项目 ID。

        2. 网络:从下拉菜单中选择您的网络。如果您尚未创建网络,请参阅创建和管理 VPC 网络,了解如何创建网络。

        3. IP 范围:输入可在对等互连网络的分配范围内分配虚拟机的内部 IP 范围。

          您可以使用无类别域间路由 (CIDR) 路由表示法指定范围,格式为 STARTING_IP/SUBNET_PREFIX_SIZE。例如,192.0.2.0/24 的前缀长度为 24。该 IP 范围的前 24 位用作子网掩码 (192.0.2.0),而可能的主机地址范围为从 192.0.2.0192.0.2.255

          前缀长度值不得超过 /29。如果没有为该范围指定值,系统会自动分配默认值 /24。如果没有为前缀长度指定值,系统会自动在对等互连的 VPC 网络中分配 IP 地址。如果没有为 IP 地址指定值,则系统会自动为 IP 地址分配一个在对等互连 VPC 网络中的范围。

  5. 点击连接主机

    如果您的 Bitbucket Server 实例位于对等网络上,则连接主机可能需要几分钟才能完成。

    系统会将您重定向到连接代码库面板。

    创建主机连接后,您的个人访问令牌和网络钩子 Secret 将安全地存储在 Secret Manager 中。您可以在 Secret Manager 页面上查看和管理 Secret。

gcloud

如需使用 gcloud 命令将 Bitbucket Server 主机连接到 Cloud Build,您必须在终端中运行 gcloud alpha builds enterprise-config bitbucketserver create 命令。与使用 Google Cloud 控制台连接主机不同,您需要在运行以下命令之前手动将个人访问令牌和网络钩子密钥存储在 Secret Manager 中:

gcloud alpha builds enterprise-config bitbucketserver create
    --name=BITBUCKET_SERVER_CONFIG_NAME \
    --user-name=USERNAME \
    --host-uri=HOST_URI \
    --admin-access-token-secret-version=ADMIN_ACCESS_TOKEN_SECRET_VERSION \
    --read-access-token-secret-version=READ_ACCESS_TOKEN_SECRET_VERSION \
    --webhook-secret-secret-version=WEBHOOK_SECRET_SECRET_VERSION \
    --api-key=API_KEY \
    --peered-network=PEERED_NETWORK \
    --peered-network-ip-range=PEERED_NETWORK_IP_RANGE \
    --ssl-ca-file=SSL_CA_FILE

其中:

  • BITBUCKET_SERVER_CONFIG_NAME 是您的 Bitbucket Server 配置的名称。
  • USERNAME 是 Bitbucket Server 的用户名。
  • HOST_URI 是 Bitbucket Server 实例的主机 URI。
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION 是存储在 Secret Manager 中的管理员访问令牌的资源名称。注意:存储在 Secret Manager 中的 Secret 的预期格式为 projects/${PROJECT_ID}/secrets/${SECRET_NAME}/versions/${VERSION_NUMBER}。您可以将 latest 指定为版本,以使用最新版本的 Secret。这适用于存储在 Secret Manager 中的每个资源。
  • READ_ACCESS_TOKEN_SECRET_VERSION 是存储在 Secret Manager 中的读取访问令牌的资源名称。
  • WEBHOOK_SECRET_SECRET_VERSION 是存储在 Secret Manager 中的网络钩子 Secret 的资源名称。
  • API_KEY 是 Google Cloud API 密钥。
  • [可选] PEERED_NETWORK 是为本地 Bitbucket Server 实例连接的 VPC 网络。如需了解详情,请参阅在专用网络中通过 Bitbucket Server 构建代码库

  • [可选] PEERED_NETWORK_IP_RANGE 是可在对等互连网络的分配范围内分配给虚拟机的内部 IP 范围。

  • SSL_CA_FILE 是包含用于向 Bitbucket Server 发出请求的 SSL 证书的本地文件的路径。证书应采用 PEM 格式。

API

如需使用 API 将您的 Bitbucket Server 主机关联到 Cloud Build,请使用以下 JSON 模板。与使用 Google Cloud 控制台连接主机不同,您需要在调用 API 之前将个人访问令牌和网络钩子密钥手动存储在 Secret Manager 中:

  {
      "hostUri": "HOST_URI",
      "username": "USERNAME",
      "apiKey": "API_KEY",
      "secrets": {
        "adminAccessTokenVersionName": "ADMIN_ACCESS_TOKEN_SECRET_VERSION",
        "readAccessTokenVersionName": "READ_ACCESS_TOKEN_SECRET_VERSION",
        "webhookSecretVersionName": "WEBHOOK_SECRET_SECRET_VERSION",
      },
      "peeredNetwork": "PEERED_NETWORK",
      "peeredNetworkIpRange": "PEERED_NETWORK_IP_RANGE",
      "sslCa": "SSL_CERTIFICATE"
  }

其中:

  • HOST_URI 是 Bitbucket Server 实例的主机 URI。
  • USERNAME 是 Bitbucket Server 的用户名。
  • API_KEY 是 Google Cloud API 密钥。
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION 是存储在 Secret Manager 中的管理员访问令牌的资源名称。您可能需要向 Cloud Build 服务帐号 service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com 授予 Secret Manager 角色。如需了解详情,请参阅向您的服务帐号授予 Secret Manager 角色

  • READ_ACCESS_TOKEN_SECRET_VERSION 是存储在 Secret Manager 中的读取访问令牌的资源名称。

  • WEBHOOK_SECRET_SECRET_VERSION 是存储在 Secret Manager 中的网络钩子 Secret 的资源名称。

  • [可选] PEERED_NETWORK 是本地 Bitbucket Server 实例要进行对等连接的 VPC 网络。

    您可以使用无类别域间路由 (CIDR) 路由表示法(格式为 STARTING_IP/SUBNET_PREFIX_SIZE)指定范围。例如,192.0.2.0/24 的前缀长度为 24。IP 范围的前 24 位用作子网掩码 (192.0.2.0),而可能的主机地址范围从 192.0.2.0192.0.2.225

  • [可选] PEERED_NETWORK_IP_RANGE 是可在对等互连网络的分配范围内分配给虚拟机的内部 IP 范围。

  • [可选] SSL_CERTIFICATE 是用于本地 Bitbucket Server 实例的 SSL 证书。

在终端中输入以下 curl 命令:

  curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/bitbucketServerConfigs/?bitbucketServerConfigId=BITBUCKET_SERVER_CONFIG_NAME -d @config.json

其中:

  • PROJECT_NUMBER 是您的 Cloud 项目编号。
  • PROJECT_ID 是您的 Cloud 项目 ID。
  • REGION 是与您的 Bitbucket Server 配置关联的区域
  • BITBUCKET_SERVER_CONFIG_NAME 是您的 Bitbucket Server 配置的名称。

如果成功,响应正文将包含一个新创建的 Operation 实例。

在终端中输入以下 curl 命令:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

其中:

  • PROJECT_NUMBER 是您的 Cloud 项目编号。
  • PROJECT_ID 是您的 Cloud 项目 ID。
  • REGION 是与您的 Bitbucket Server 配置关联的区域
  • OPERATION_ID 是您的 Bitbucket Server 配置创建操作的 ID。

您可能需要继续运行 GetOperation API 命令,直到响应包含 done: true(表示操作已完成)。如果 Bitbucket Server 配置已成功创建,您可以在 response.value 字段中看到该配置。否则,请查看 error 字段以获取详细的错误报告。

后续步骤