在私人網路中從 GitLab Enterprise Edition 建構存放區

您可以透過 Cloud Build 建立觸發條件,從 GitLab Enterprise Edition 託管的存放區建構內容,並在發生與 GitLab Enterprise Edition 存放區相關的事件 (例如推送修訂版本或合併要求) 時執行建構作業。

本頁說明如何透過私人網路代管 GitLab Enterprise Edition 執行個體,並啟用觸發條件功能。

事前準備

  • Enable the Cloud Build, Secret Manager, Compute Engine, and Service Networking APIs.

    Enable the APIs

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

如果 GitLab Enterprise Edition 執行個體只能在 VPC 網路中存取,您需要設定 Service Directory 服務,並使用私人集區建構。包含虛擬私有雲網路的專案,可以與包含 Service Directory 服務的專案不同。請按照下列說明操作,確保執行個體可連線,再建立觸發條件:

  1. 啟用 Service Directory API

  2. 請確認您具備專案 IAM 管理員角色,並已授予您要在其中建立 Service Directory 服務的Google Cloud 專案。如要瞭解如何授予 IAM 角色,請參閱設定 Cloud Build 資源的存取權

  3. 完成下列步驟,設定服務目錄服務:

    1. 為 Google Cloud 專案設定命名空間

      您在命名空間中指定的區域必須與 Cloud Build 主機連線中指定的區域相符。

    2. 在命名空間中設定服務

    3. 為已註冊的服務設定端點

      設定端點時,必須使用內部 IP 位址,並指定 HTTPS 通訊埠號碼,Cloud Build 才能連線至您的服務。

    如要進一步瞭解如何設定私人網路存取權,請參閱「設定私人網路存取權」。Service Directory 也與負載平衡器和 Google Kubernetes Engine (GKE) 等服務整合。詳情請參閱服務目錄和負載平衡總覽,或 Service Directory for GKE 總覽

  4. 將 Service Directory 存取權授予 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_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。
  5. 將虛擬私有雲網路資源存取權授予 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。
  6. 使用私人集區執行建構作業。如未建立私人集區,請參閱建立新的私人集區

  7. 按照操作說明建立 GitLab Enterprise Edition 觸發程序,建構託管於 GitLab Enterprise Edition 執行個體的存放區。

    將 GitLab Enterprise Edition 主機連線至 Cloud Build 時,如果加入自行簽署或私人憑證,必須將主機 URI 設為憑證的主體別名 (SAN)。

現在,GitLab Enterprise Edition 觸發條件會根據您的設定,自動在 GitLab Enterprise Edition 執行個體上叫用建構作業。

使用 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 代理伺服器。詳情請參閱「為混合式部署設定網路邊緣服務」。

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

資料共用

Cloud Build 傳送至 GitLab Enterprise Edition 的資料可協助您依名稱識別觸發條件,並在 GitLab Enterprise Edition 存放區中查看建構結果。

Cloud Build 與 GitLab Enterprise Edition 會共用下列資料:

  • Google Cloud 專案 ID
  • 觸發條件名稱

後續步驟