在私人網路中,從 GitHub Enterprise 建構存放區

Cloud Build 可讓您在 GitHub Enterprise 執行個體上建立觸發條件。本頁面說明如何使用 GitHub Enterprise 觸發條件,叫用建構作業來回應 GitHub Enterprise 執行個體的修訂版本或提取要求,以及如果執行個體託管於私人網路,如何從 GitHub Enterprise 建構存放區。

事前準備

  • 啟用 Cloud Build 和 Service Directory API (如果尚未啟用)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

  • 如果您尚未建立私人集區,請按照「建立及管理私人集區」中的操作說明建立私人集區。如要在私人網路中建構,則須使用私人集區。

在私人網路中透過 GitHub Enterprise 建構存放區

請完成下列步驟,從私人網路將 GitHub Enterprise 執行個體連結至 Cloud Build:

  1. 授予 Cloud Build 服務代理 Service Directory 存取權:

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    export CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding  PROJECT_ID_CONTAINING_SERVICE_DIRECTORY \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.viewer"
    

    更改下列內容:

    • PROJECT_ID 是您的 Cloud Build 專案 ID。
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY 是Google Cloud 專案的 ID,該專案包含您的 Service Directory。
  2. 將虛擬私有雲網路資源存取權授予 Cloud Build 服務代理:

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    export CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID_CONTAINING_NETWORK_RESOURCE \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.pscAuthorizedService"
    

    更改下列內容:

    • PROJECT_ID 是您的 Cloud Build 專案 ID。
    • PROJECT_ID_CONTAINING_NETWORK_RESOURCE 是Google Cloud 專案的 ID,其中包含網路資源。
  3. 請完成下列步驟,設定 Service Directory 服務:

    1. 為服務設定命名空間:

       gcloud service-directory namespaces create NAMESPACE --location=REGION --project=PROJECT_ID_CONTAINING_SERVICE_DIRECTORY
      

      更改下列內容:

      • NAMESPACE 是 Service Directory 命名空間的名稱。
      • LOCATION 是建立連線和連結存放區的區域。
      • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY 是包含 Service Directory 的Google Cloud 專案 ID。
    2. 為命名空間設定服務:

       gcloud service-directory services create SERVICE --namespace=NAMESPACE --location=LOCATION
      

      更改下列內容:

      • SERVICE 是 Service Directory 資源的名稱。
      • NAMESPACE 是 Service Directory 命名空間的名稱。
      • LOCATION 是建立連線和連結存放區的區域。
    3. 為服務設定端點:

       gcloud service-directory endpoints create ENDPOINT_NAME \
         --namespace=NAMESPACE \
         --service=SERVICE \
         --location=LOCATION \
         --address=INSTANCE_IP_ADDRESS \
         --port=PORT \
         --network=projects/PROJECT_ID_CONTAINING_NETWORK/locations/global/networks/NETWORK
      

      更改下列內容:

      • ENDPOINT_NAME 是端點名稱。
      • NAMESPACE 是 Service Directory 命名空間的名稱。
      • SERVICE 是 Service Directory 資源的名稱。
      • LOCATION 是建立連線和連結存放區的區域。
      • INSTANCE_IP_ADDRESS 是 GitHub Enterprise 執行個體在網路中的 IP 位址。例如,123.45.67.89。詳情請參閱「使用 Service Directory 連線至 Google Cloud外部的主機」。
      • PORT 是 HTTPS 的通訊埠名稱。
      • PROJECT_ID_CONTAINING_NETWORK 是包含虛擬私有雲網路的 Google Cloud 專案 ID。
      • NETWORK 是您虛擬私有雲網路的名稱。

    您現在可以使用服務資源 (projects/{PROJECT_ID}/locations/{LOCATION}/namespaces/{NAMESPACE}/services/{SERVICE}),按照下列步驟建立連線。

  4. 連結 GitHub Enterprise 主機。

  5. 連結 GitHub Enterprise 存放區。

  6. 建立 GitHub Enterprise 觸發條件,建構託管於 GitHub Enterprise 執行個體的存放區。

使用 Service Directory 連線至 Google Cloud以外的主機

Service Directory 會使用 IP 位址範圍 35.199.192.0/19,連線至 Google Cloud以外的主機。您必須將這個範圍新增至防火牆的許可清單。此外,您必須設定私人網路,透過 Cloud VPN 或 Cloud Interconnect 連線轉送這個範圍。

如果連線使用 Cloud Router,您可以設定連線,將範圍傳達至私人網路。

詳情請參閱「設定私人網路存取權」。

使用 Cloud Load Balancing 連線至 Google Cloud以外的主機

如果網路設定不允許將 Service Directory IP 位址範圍 35.199.192.0/19 轉送至 Cloud VPN 或 Cloud Interconnect,您可以使用 Cloud Load Balancing 建立負載平衡器,將流量導向主機。

建立 Service Directory 端點時,請務必使用負載平衡器轉送規則的 IP 位址,而非主機的 IP 位址。建立端點時,您可以使用內部 HTTPS 負載平衡器或內部傳輸控制通訊協定 (TCP) 負載平衡器。

建立 TCP 負載平衡器時,請考量下列事項:

  • 您只需要混合式連線網路端點群組 (NEG),即可連線至主機。
  • TCP 負載平衡器不需要 SSL 憑證的未加密私密金鑰。
  • Cloud VPN 設定必須使用 Cloud Router,並啟用全域動態轉送。如果 Cloud VPN 使用靜態轉送,您可以改用採用 Cloud Service Mesh 的 Proxy。詳情請參閱「為混合式部署作業設定網路邊緣服務」。

如要進一步瞭解如何建立 HTTPS 負載平衡器,請參閱「設定具備混合式連線能力內部應用程式負載平衡器」。如要進一步瞭解如何建立 TCP 負載平衡器,請參閱「設定具備混合式連線能力的區域性內部 Proxy 網路負載平衡器」。

後續步驟