Cloud Build を使用すると、GitHub Enterprise インスタンスでトリガーを作成できます。このページでは、GitHub Enterprise トリガーを使用して、GitHub Enterprise インスタンスからの commit または pull リクエストに応答してビルドを呼び出す方法と、インスタンスがプライベート・ネットワークでホストされている場合に GitHub Enterprise からリポジトリをビルドする方法について説明します。
準備
-
Enable the Cloud Build and Service Directory APIs.
- プライベート プールを作成していない場合は、プライベート プールの作成と管理の手順に沿ってプライベート プールを作成します。プライベート ネットワークでビルドするには、プライベート プールが必要です。
プライベート ネットワーク内の GitHub Enterprise からリポジトリをビルドする
プライベート ネットワークから GitHub Enterprise インスタンスを Cloud Build に接続するには、次の手順を行います。
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 です。
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 です。
次の手順に沿って、Service Directory サービスを設定します。
サービスの名前空間を構成します。
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 です。
名前空間のサービスを構成します。
gcloud service-directory services create SERVICE --namespace=NAMESPACE --location=LOCATION
以下を置き換えます。
- SERVICE は、Service Directory リソースの名前です。
- NAMESPACE は Service Directory 名前空間の名前です。
- LOCATION は、接続を作成してリポジトリをリンクするリージョンです。
サービスのエンドポイントを構成します。
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}
)を使用して接続を作成できるようになりました。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 Balancer を使用してロードバランサを作成して、トラフィックをホストに転送できます。
Service Directory エンドポイントを作成するときは、ホストの IP アドレスではなく、ロードバランサの転送ルールの IP アドレスを使用してください。エンドポイントの作成時に、内部 HTTPS ロードバランサまたは内部伝送制御プロトコル(TCP)ロードバランサを使用できます。
TCP ロードバランサを作成する場合は、次の点を考慮してください。
- ホストに到達するには、ハイブリッド接続ネットワーク エンドポイント グループ(NEG)のみが必要です。
- TCP ロードバランサでは、SSL 証明書用に暗号化されていない秘密鍵は必要ありません。
- Cloud VPN の設定では、グローバル動的ルーティングで Cloud Router を使用する必要があります。Cloud VPN で静的ルーティングが使用されている場合は、代わりに Cloud Service Mesh を使用するプロキシを使用できます。詳細については、ハイブリッド デプロイ用にネットワーク エッジ サービスを設定するをご覧ください。
HTTPS ロードバランサの作成の詳細については、ハイブリッド接続で内部アプリケーション ロードバランサを設定するをご覧ください。TCP ロードバランサの作成の詳細については、ハイブリッド接続でリージョン内部プロキシ ネットワーク ロードバランサを設定するをご覧ください。
次のステップ
- ビルドトリガーを作成および管理する方法を学習する。
- Compute Engine で Blue/Green デプロイを実行する方法を学習する。