プライベート ネットワーク内の GitHub Enterprise からリポジトリをビルドする

Cloud Build を使用すると、GitHub Enterprise インスタンスでトリガーを作成できます。このページでは、GitHub Enterprise トリガーを使用して、GitHub Enterprise インスタンスからの commit または pull リクエストに応答してビルドを呼び出す方法と、インスタンスがプライベート・ネットワークでホストされている場合に GitHub Enterprise からリポジトリをビルドする方法について説明します。

準備

  • Enable the Cloud Build and Service Directory APIs.

    Enable the APIs

  • プライベート プールを作成していない場合は、プライベート プールの作成と管理の手順に沿ってプライベート プールを作成します。プライベート ネットワークでビルドするには、プライベート プールが必要です。

プライベート ネットワーク内の 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 はユーザーの Google Cloud プロジェクト ID です。
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY は、Service Directory を含む Google Cloud プロジェクトの ID です。
  2. VPC ネットワーク リソースへのアクセス権を付与します。ここで、PROJECT_ID_CONTAINING_NETWORK_RESOURCE は、ネットワーク リソースを含む Google Cloud プロジェクトの ID です。

    gcloud projects add-iam-policy-binding PROJECT_ID_CONTAINING_NETWORK_RESOURCE \
      --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
      --role="roles/servicedirectory.pscAuthorizedService"
    
  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/us-central1/ 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 は、VPC ネットワークを含む Google Cloud プロジェクト ID です。
      • NETWORK は VPC ネットワークの名前です。

    これで、次の手順でサービス リソース(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 を使用して GitHub Enterprise ホストを接続します。この範囲をファイアウォールの許可リストに追加する必要があります。さらに、この範囲を 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 ロードバランサの作成の詳細については、ハイブリッド接続でリージョン内部プロキシ ネットワーク ロードバランサを設定するをご覧ください。

次のステップ