プライベート ネットワークで GitLab Enterprise Edition からリポジトリをビルドする

Cloud Build を使用すると、GitLab Enterprise Edition でホストされているリポジトリからビルドするトリガーを作成できます。GitLab Enterprise Edition リポジトリに関連付けられた commit push やマージ リクエストなどのイベントに応じてビルドを実行できます。

このページでは、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 サービスを設定し、プライベート プールを使用してビルドする必要があります。VPC ネットワークを含むプロジェクトは、Service Directory サービスを含むプロジェクトとは異なるプロジェクトに存在できます。次の手順に沿って、トリガーを作成する前にインスタンスに到達できるようにします。

  1. Service Directory API を有効にします。

  2. Service Directory サービスを作成する Google Cloud プロジェクトに プロジェクト IAM 管理者ロールが付与されていることを確認します。IAM ロールを付与する方法については、Cloud Build リソースへのアクセスの構成をご覧ください。

  3. 次の手順に沿って、Service Directory サービスを設定します。

    1. Google Cloud プロジェクトの名前空間を構成します。

      名前空間で指定したリージョンは、Cloud Build ホスト接続で指定したリージョンと一致する必要があります

    2. 名前空間でサービスを構成します。

    3. 登録済みサービスのエンドポイントを構成します。

      エンドポイントを構成する際、Cloud Build がサービスに到達するためには、内部 IP アドレスを使用し、HTTPS ポート番号を指定する必要があります

    プライベート ネットワーク アクセスの構成の詳細については、プライベート ネットワーク アクセスを構成するをご覧ください。Service Directory は、ロードバランサや Google Kubernetes Engine(GKE)などのサービスとの統合も提供しています。詳細については、Service Directory とロード バランシングの概要か、GKE 向け Service Directory の概要をご覧ください。

  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 は、Service Directory を含む Google Cloud プロジェクトの ID です。
  5. VPC ネットワーク リソースに 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 Balancer を使用してロードバランサを作成して、トラフィックをホストに転送できます。

Service Directory エンドポイントを作成するときは、ホストの IP アドレスではなく、ロードバランサの転送ルールの IP アドレスを使用してください。エンドポイントの作成時に、内部 HTTPS ロードバランサまたは内部伝送制御プロトコル(TCP)ロードバランサを使用できます。

TCP ロードバランサを作成する場合は、次の点を考慮してください。

  • ホストに到達するには、ハイブリッド接続ネットワーク エンドポイント グループ(NEG)のみが必要です。
  • TCP ロードバランサでは、SSL 証明書用に暗号化されていない秘密鍵は必要ありません。
  • Cloud VPN の設定では、グローバル動的ルーティングで Cloud Router を使用する必要があります。Cloud VPN で静的ルーティングが使用されている場合は、代わりに Cloud Service Mesh を使用するプロキシを使用できます。詳細については、ハイブリッド デプロイ用にネットワーク エッジ サービスを設定するをご覧ください。

HTTPS ロードバランサの作成の詳細については、ハイブリッド接続で内部アプリケーション ロードバランサを設定するをご覧ください。TCP ロードバランサの作成の詳細については、ハイブリッド接続でリージョン内部プロキシ ネットワーク ロードバランサを設定するをご覧ください。

データ共有

Cloud Build から GitLab Enterprise Edition に送信されたデータは、トリガーを名前で識別し、GitLab Enterprise Edition リポジトリでビルドの結果を確認する際に役立ちます。

次のデータは、Cloud Build と GitLab Enterprise Edition の間で共有されます。

  • Google Cloud プロジェクト ID
  • トリガーの名前

次のステップ