GitHub Enterprise からのリポジトリのビルド

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

このページでは、GitHub Enterprise インスタンスでビルドトリガーを有効にする方法について説明します。詳細については、Cloud Build トリガーCloud Build リポジトリをご覧ください。

始める前に

手順に沿って GitHub Enterprise ホストに接続します
  • Enable the Cloud Build and Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

GitHub Enterprise リポジトリのトリガーを作成するには、 Google Cloud とリポジトリの間に接続が必要です。 Google Cloudの GitHub Enterprise アプリを使用して接続を作成するには、GitHub Enterprise リポジトリに接続するをご覧ください。

GitHub Enterprise トリガーを作成する

このセクションでは、トリガーを作成して、GitHub Enterprise インストールにそのトリガーをリンクする方法について説明します。プライベート ネットワークで GitHub Enterprise トリガーを使用する場合は、プライベート ネットワークで GitHub Enterprise からのリポジトリのビルドの手順をご覧ください。

Google Cloud コンソール

Google Cloud コンソールを使用して GitHub Enterprise トリガーを作成するには:

  1. Google Cloud コンソールで [トリガー] ページを開きます。

    [トリガー] ページを開く

  2. Google Cloud プロジェクトを選択し、[開く] をクリックします。

  3. [トリガーを作成] をクリックします。

  4. 次のトリガー設定を入力します。

    • 名前: トリガーの名前を入力します。

    • リージョン: トリガーのリージョンを選択します。

           * If the build config file associated with the trigger specifies a
           [private pool](/build/docs/private-pools/private-pools-overview), then
           Cloud Build uses the private pool to run your build. In this
           case, the region you specify in your trigger must match the region
           where you created your private pool.
           * If the build config file associated with the trigger **doesn't**
           specify a private pool, then Cloud Build uses the default
           pool to run your build in the same region as your trigger.
      

    • 説明(省略可): トリガーの説明を入力します。

    • イベント: トリガーを起動するリポジトリ イベントを選択します。

      • ブランチに push する: 特定のブランチに対して commit が行われたときにビルドを開始するトリガーを設定します。

      • 新しいタグを push する: 特定のタグを含む commit が行われたときにビルドを開始するトリガーを設定します。

      • pull リクエスト: pull リクエストの commit が行われたときにビルドを開始するトリガーを設定します。

    • ソース: GitHub Enterprise リポジトリに関する情報を構成します。

      • リポジトリ サービス: Cloud Build を選択します。

      • リポジトリの生成: ソースとして [Developer Connect] を選択します。

      • リポジトリ: 使用可能なリポジトリのリストからリポジトリを選択します。

      • ブランチまたはタグ: ブランチまたはタグの値にマッチングさせる正規表現を指定します。有効な正規表現の構文については、RE2 構文をご覧ください。

      • コメント制御: イベントとして pull リクエストを選択した場合は、ビルドをトリガーによって自動的に実行するかどうか、次のいずれかのオプションを選択します。

        • 必須(オーナーと共同編集者を除く): pull リクエストがリポジトリ所有者または共同編集者によって作成または更新されると、ビルドが自動的にトリガーによって実行されます。外部の投稿者がアクションを開始する場合、その pull リクエストで所有者または共同編集者が /gcbrun にコメントした後にのみビルドが実行されます。

        • 必須: 投稿者を問わず pull リクエストが作成または更新されると、所有者または共同編集者が pull リクエストに /gcbrun とコメントした後にのみビルドが実行されます。ビルドは、pull リクエストが変更されるたびに実行されます。

        • 不要: 投稿者を問わず pull リクエストが作成または更新されると、ビルドが自動的にトリガーで実行されます。

    • 構成: ビルドに使用するリモート リポジトリにあるビルド構成ファイルを選択するか、インライン ビルド構成ファイルを作成します。

      • タイプ: ビルドに使用する構成のタイプを選択します。
        • 自動検出: リポジトリに cloudbuild.yaml または Dockerfile がある場合、Cloud Build は構成タイプを自動的に検出します。
        • Cloud Build 構成ファイル(yaml または json): 構成にビルド構成ファイルを使用します。
        • Dockerfile: 構成には Dockerfile を使用します。
        • Buildpacks: 構成には Buildpacks を使用します。
      • 場所: 構成の場所を指定します。

        • リポジトリ: 構成ファイルがリモート リポジトリにある場合は、ビルド構成ファイルまたは Dockerfile ディレクトリの場所と生成されたイメージの名前を指定します。構成が Dockerfile の場合は、必要に応じてビルドのタイムアウトを指定できます。Dockerfile とイメージ名を指定すると、ビルドが実行される docker build コマンドのプレビューが表示されます。
        • インライン: 構成オプションとして Cloud Build 構成ファイル(yaml または json)を選択した場合、インライン ビルド構成を指定できます。Google Cloud コンソールで [エディタを開く] をクリックして、YAML または JSON 構文でビルド構成ファイルを書き込みます。[完了] をクリックしてビルド構成ファイルを保存します。
    • 代入変数(省略可): ビルドの構成オプションとして Cloud Build 構成ファイルを選択した場合、このフィールドを使用して、トリガー固有の代入変数を定義できます。たとえば、複数のトリガーを作成し、それぞれのトリガーが特定の環境にアプリをデプロイするとします。この場合、アプリケーションが 1 つの環境にデプロイされることをビルド構成ファイルに指定し、このフィールドを使用して代入変数を定義して、このトリガーがデプロイされる環境を指定できます。ビルド構成ファイルに代入値を指定する方法については、変数値の置換をご覧ください。

    • ビルドログ(省略可): チェックボックスをオンにすると、ビルドログが GitHub に送信されます。ビルドログを表示する方法については、ビルドログの表示をご覧ください。

    • サービス アカウント: トリガーを呼び出すときに使用するサービス アカウントを選択します。組織のポリシーで以前の Cloud Build サービス アカウントの使用が許可されている場合は、このフィールドを空白のままにして、以前のサービス アカウントを使用できます。それ以外の場合は、Compute Engine のデフォルトのサービス アカウントであっても、使用する特定のサービス アカウントを選択する必要があります。

  5. [作成] をクリックして、ビルドトリガーを保存します。

gcloud コマンドを使用して GitHub トリガーを作成するには、ビルドトリガーの作成gcloud コマンドをご覧ください。

gcloud CLI

gcloud コマンドを使用して GitHub トリガーを作成するには、次のコマンドを実行します。

    gcloud alpha builds triggers create developer-connect
      --name=TRIGGER_NAME \
      --git-repository-link=projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/gitRepositoryLinks/REPO_NAME \
      --branch-pattern=BRANCH_PATTERN # or --tag-pattern=TAG_PATTERN \
      --build-config=BUILD_CONFIG_FILE \
      --region=REGION \
      --service-account=SERVICE-ACCOUNT

ここで

  • TRIGGER_NAME はトリガーの名前です。
  • PROJECT_ID は Google Cloud プロジェクト ID です。
  • REGION はトリガーのリージョンです。
  • CONNECTION_NAME は GitHub Enterprise 接続の名前です。
  • GIT_REPOSITORY_LINK は Git リポジトリへのリンクです。
  • BRANCH_PATTERN は、ビルドを呼び出すリポジトリ内のブランチ名です。
  • TAG_PATTERN は、ビルドを呼び出すリポジトリ内のタグ名です。
  • BUILD_CONFIG_FILE はビルド構成ファイルのパスです。
  • SERVICE-ACCOUNT は、トリガーとビルド オペレーションに使用するサービス アカウントです。

API

API を使用して GitHub Enterprise トリガーを作成するには、次の JSON テンプレートを使用します。

  {
      "filename": "cloudbuild.yaml",
      "name": "TRIGGER_NAME",
      "description": "TRIGGER_DESCRIPTION",
      "serviceAccount": "SERVICE_ACCOUNT",
      "github": {
          "owner": "OWNER",
          "name": "REPO_NAME",
          "push": {
              "branch": ".*"
          },
      "enterprise_config_resource_name": "projects/PROJECT_NUMBER/githubEnterpriseConfigs/CONNECTION_ID"
      
      },
      "include_build_logs": include-build-logs-value
  }

ここで

  • TRIGGER_NAME はトリガーの名前です。
  • TRIGGER_DESCRIPTION はトリガーの説明です。
  • SERVICE_ACCOUNT は、トリガーとビルド オペレーションに使用するサービス アカウントです。
  • OWNER は GitHub リポジトリのオーナーです。
  • REPO_NAME は GitHub リポジトリの名前です。
  • PROJECT_NUMBER は Google Cloud プロジェクト番号です。
  • CONNECTION_ID は、GitHub Enterprise ホストへの接続の ID です。API では、この接続は GitHubEnterpriseConfig リソース、または Cloud Build と GitHub Enterprise Server 間の関連付けとして表されます。
  • include-build-logs-value は、省略可能な include_build_logs フィールドの値です。このフィールドの値が INCLUDE_BUILD_LOGS_SPECIFIED の場合、ビルドログがリポジトリに表示されます。

ターミナルで、次の curl コマンドを入力します。

curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/triggers -d @trigger.json

ここで

  • PROJECT_NUMBER は Google Cloud プロジェクト番号です。
  • PROJECT_ID は Google Cloud プロジェクト ID です。

Terraform

ビルドトリガーを作成し、Developer Connect を使用して GitHub Enterprise インストールに接続する Terraform コードのサンプルについては、Terraform ドキュメントの次のトピックをご覧ください。

データ共有

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

現在、次のデータが Cloud Build と GitHub Enterprise 間で共有されています。

  • Cloud プロジェクト ID
  • トリガーの名前
  • ビルドログ

2020 年 8 月より前にトリガーを作成した場合、プロジェクトでデータ共有が有効になっていない可能性があります。Cloud Build データ共有タブの [有効にする] をクリックすることで、プロジェクト内のすべての GitHub Enterprise トリガーに対してデータ共有を有効にできます。

GitHub Enterprise リポジトリで必須ステータス チェックを有効にしている場合、データ共有を有効にするとステータス チェックが一時的に中断する場合があります。次の方法で、ステータス チェックの設定を調整してトリガー名を検索できます。

  • GitHub Enterprise リポジトリで Cloud Build 固有の必須チェックをすべて無効にする
  • Cloud Build でデータ共有が有効になっていることを確認する
  • Cloud Build でステータスをリポジトリに送信する新しいビルドを実行する
  • 必要なステータス チェックを再び有効にし、トリガー名を選択する

次のステップ