本頁說明如何將 Bitbucket Data Center 主機連線至 Cloud Build。
事前準備
- 
  
  
    
      Enable the Cloud Build, Secret Manager, and Compute Engine APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 在 Bitbucket 資料中心存放區中準備好原始碼。
- 在 Bitbucket Data Center 來源存放區中,擁有 Dockerfile或 Cloud Build 設定檔。
- 如未安裝 Bitbucket Data Center 執行個體,請參閱「安裝 Bitbucket Data Center」一文的說明。
- 如要在本頁面使用 - gcloud指令,請安裝 Google Cloud CLI。
連結至 Bitbucket Data Center 主機
主控台
如要使用 Google Cloud 控制台將 Bitbucket Data Center 主機連結至 Cloud Build,請按照下列步驟操作:
- 在 Google Cloud 控制台中開啟「Repositories」(存放區) 頁面: 
- 選取頁面頂端的「第 1 代」分頁標籤。 
- 按一下「連結主機」。 
- 從下拉式選單中選取「Bitbucket Data Center」。 - 系統會顯示「連結主機」面板。 - 輸入下列資訊,將 Bitbucket Data Center 執行個體連結至 Cloud Build: - 「區域」:選取連線的區域。 
- 名稱:輸入連線名稱。 
- 主機網址:Bitbucket Data Center 執行個體的主機網址。例如: - https://bbs.example-test.com:7990。
- Google Cloud API 金鑰:輸入用於驗證憑證的 API 金鑰。 
- CA 憑證:自行簽署的憑證。憑證大小不得超過 10 KB,且應為 PEM 格式 ( - .pem、- .cer或- .crt)。如果將這個部分留空, Google Cloud 會使用預設憑證集中的憑證。
- 使用者名稱:你的 Bitbucket Data Center 帳戶使用者名稱。這個帳戶應具備您要連結至 Cloud Build 的存放區管理員存取權。 
- 讀取存取權杖:輸入具有讀取權限的 Bitbucket Data Center 帳戶個人存取權杖。 
- 管理員存取權杖:輸入 Bitbucket Data Center 帳戶的個人存取權杖,並取得專案和存放區的管理員權限。 
- 在「網路類型」下方,選取下列任一選項: - 公開網際網路:如果可透過公開網際網路存取執行個體,請選取這個選項。 
- 私人網路:如果執行個體是託管在私人網路上,請選取這個選項。 - 專案:選取 Google Cloud 專案 ID。 
- 網路:從下拉式選單中選取網路。如果您尚未建立網路,請參閱「建立及管理虛擬私有雲網路」,瞭解如何建立網路。 
- IP 範圍:輸入 VM 可在對等互連網路的已分配範圍內指派的內部 IP 範圍。 - 您可以使用無類別跨網域路由 (CIDR) 路由標記法指定範圍,格式為 - STARTING_IP/SUBNET_PREFIX_SIZE。舉例來說,- 192.0.2.0/24的前置碼長度為 24。IP 範圍的前 24 個位元會做為子網路遮罩 (- 192.0.2.0),而可能的主機位址範圍則介於- 192.0.2.0到- 192.0.2.255之間。- 前置字串長度值不得超過 - /29。如未指定範圍值,系統會自動指派預設值- /24。如果未指定前置字元長度,系統會自動在對等互連的 VPC 網路中指派 IP 位址。如果未指定 IP 位址值,系統會自動在對等互連的 VPC 網路中指派 IP 位址範圍。
 
 
 
- 按一下「連結主機」。 - 如果 Bitbucket Data Center 執行個體位於對等互連的網路上,主機連線作業可能需要幾分鐘才能完成。 - 系統會將您重新導向至「Connect Repository」(連結存放區) 面板。 - 建立主機連線後,系統會將個人存取權杖和 Webhook 密鑰安全地儲存在 Secret Manager 中。您可以在「Secret Manager」頁面查看及管理密鑰。 
gcloud
如要使用 gcloud 指令將 Bitbucket Data Center 主機連線至 Cloud Build,請在終端機中執行 gcloud alpha builds enterprise-config bitbucketserver create 指令。與使用Google Cloud 控制台連結主機不同,您需要先在 Secret Manager 中手動儲存個人存取權杖和 Webhook 密鑰,才能執行下列指令:
gcloud alpha builds enterprise-config bitbucketserver create
    --name=BITBUCKET_DATA_CENTER_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_DATA_CENTER_CONFIG_NAME 是 Bitbucket Data Center 設定的名稱。
- USERNAME 是你的 Bitbucket Data Center 使用者名稱。
- HOST_URI 是 Bitbucket Data Center 執行個體的主機 URI。
- ADMIN_ACCESS_TOKEN_SECRET_VERSION 是儲存在 Secret Manager 中的管理員存取權杖資源名稱。儲存在 Secret Manager 中的密鑰應採用 projects/${PROJECT_ID}/secrets/${SECRET_NAME}/versions/${VERSION_NUMBER}格式。您可以將latest指定為版本,使用密碼的最新版本。這適用於儲存在 Secret Manager 中的每個資源。
- READ_ACCESS_TOKEN_SECRET_VERSION 是儲存在 Secret Manager 中的讀取存取權杖資源名稱。
- WEBHOOK_SECRET_SECRET_VERSION 是儲存在 Secret Manager 中的 Webhook 密鑰資源名稱。
- API_KEY 是 Google Cloud API 金鑰。
- 選用:PEERED_NETWORK 是要連線的虛擬私有雲網路,適用於地端的 Bitbucket Data Center 執行個體。詳情請參閱「在私人網路中從 Bitbucket Data Center 建構存放區」。 
- 選用:PEERED_NETWORK_IP_RANGE 是 VM 可在對等互連網路的已分配範圍內指派的內部 IP 範圍。 
- SSL_CA_FILE 是本機檔案的路徑,其中包含您要用於向 Bitbucket Data Center 發出要求的 SSL 憑證。憑證應採用 PEM 格式。 
API
如要使用 API 將 Bitbucket Data Center 主機連線至 Cloud Build,請使用下列 JSON 範本。與使用 Google Cloud 控制台連線主機不同,您需要先在 Secret Manager 中手動儲存個人存取權杖和 Webhook 密鑰,才能呼叫 API:
{
    "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 Data Center 執行個體的主機 URI。
- USERNAME 是你的 Bitbucket Data Center 使用者名稱。
- API_KEY 是 Google Cloud API 金鑰。
- ADMIN_ACCESS_TOKEN_SECRET_VERSION 是儲存在 Secret Manager 中的管理員存取權杖資源名稱。您可能需要將 Secret Manager Secret 存取者角色授予 Cloud Build 服務代理程式 - service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com。詳情請參閱「將 Secret Manager 角色授予服務帳戶」一文。
- READ_ACCESS_TOKEN_SECRET_VERSION 是儲存在 Secret Manager 中的讀取存取權杖資源名稱。 
- WEBHOOK_SECRET_SECRET_VERSION 是儲存在 Secret Manager 中的 Webhook 密鑰資源名稱。 
- 選用:PEERED_NETWORK 是要與內部部署 Bitbucket Data Center 執行個體對等互連的 VPC 網路。 - 您可以使用無類別跨網域路由 (CIDR) 路由標記法指定範圍,格式為 - STARTING_IP/SUBNET_PREFIX_SIZE。舉例來說,- 192.0.2.0/24的前置碼長度為 24。IP 範圍的前 24 個位元會做為子網路遮罩 (- 192.0.2.0),而可能的主機位址範圍則從- 192.0.2.0到- 192.0.2.225。
- 選用:PEERED_NETWORK_IP_RANGE 是 VM 可在對等互連網路的已分配範圍內指派的內部 IP 範圍。 
- 選用:SSL_CERTIFICATE 是用於內部部署 Bitbucket Data Center 執行個體的 SSL 憑證。 
在終端機中輸入下列 curl 指令:
  curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/bitbucketServerConfigs/?bitbucketServerConfigId=BITBUCKET_DATA_CENTER_CONFIG_NAME -d @config.json
其中:
- PROJECT_ID 是您的 Google Cloud 專案 ID。
- REGION 是與 Bitbucket Data Center 設定相關聯的區域。
- BITBUCKET_DATA_CENTER_CONFIG_NAME 是 Bitbucket Data Center 設定的名稱。
如果成功,回應主體即會包含新建立的 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 是您的 Google Cloud 專案編號。
- PROJECT_ID 是您的 Google Cloud 專案 ID。
- REGION 是與 Bitbucket Data Center 設定相關聯的區域。
- OPERATION_ID 是 Bitbucket Data Center 設定建立作業的 ID。
您可能需要持續執行 GetOperation API 指令,直到回應包含 done: true 為止,這表示作業已完成。如果成功建立 Bitbucket Data Center 設定,您可以在 response.value 欄位中看到設定。否則,請參閱 error 欄位中的詳細錯誤報告。