GitLab からリポジトリをビルドする

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

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

始める前に

手順に沿って GitLab ホストに接続します
  • Cloud Build API と Secret Manager API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    API を有効にする

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

GitLab トリガーを作成する

このセクションでは、トリガーを作成して GitLab インストールにリンクする方法について説明します。

Google Cloud コンソール

Google Cloud コンソールを使用して GitLab トリガーを作成するには、次の操作を行います。

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

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

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

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

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

    • 名前: トリガーの名前。

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

      • トリガーに関連付けられたビルド構成ファイルでプライベート プールが指定されている場合、Cloud Build は、そのプライベート プールを使用してビルドを実行します。この場合、トリガーで指定するリージョンは、プライベート プールを作成したリージョンと一致する必要があります。
      • トリガーに関連付けられたビルド構成ファイルでプライベート プールが指定されていない場合、Cloud Build はデフォルトのプールを使用してトリガーと同じリージョンでビルドを実行します。

    • 説明(省略可): トリガーの説明。

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

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

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

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

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

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

      • リポジトリの世代: ソースとして [第 2 世代] を選択します。

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

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

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

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

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

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

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

      • タイプ: ビルドに使用する構成のタイプを選択します。

        • Cloud Build 構成ファイル(yaml または json): 構成にビルド構成ファイルを使用します。
        • Dockerfile: 構成には Dockerfile を使用します。
      • 場所: 構成の場所を指定します。

        • リポジトリ: 構成ファイルがリポジトリにある場合は、ビルド構成ファイルまたは Dockerfile ディレクトリの場所と生成されたイメージの名前を指定します。構成が Dockerfile の場合は、必要に応じてビルドのタイムアウトを指定できます。Dockerfile とイメージ名を指定すると、ビルドが実行される docker build コマンドのプレビューが表示されます。

        • インライン: 構成オプションとして Cloud Build 構成ファイル(yaml または json)を選択した場合、インライン ビルド構成を指定できます。Google Cloud コンソールで [エディタを開く] をクリックして、YAML または JSON 構文でビルド構成ファイルを書き込みます。[完了] をクリックしてビルド構成ファイルを保存します。

  5. [作成] をクリックして GitLab Enterprise Edition トリガーを作成します。

gcloud CLI

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

    gcloud builds triggers create gitlab \
      --name=TRIGGER_NAME \
      --repository=projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/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 は GitLab 接続の名前です。
  • REPO_NAME はリポジトリの名前です
  • BRANCH_PATTERN は、ビルドを呼び出すリポジトリ内のブランチ名です。
  • TAG_PATTERN は、ビルドを呼び出すリポジトリ内のタグ名です。
  • BUILD_CONFIG_FILE はビルド構成ファイルのパスです。
  • SERVICE-ACCOUNT は、トリガーとビルド オペレーションに使用するサービス アカウントです。

API

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

{
    "filename": "cloudbuild.yaml",
    "name": "curl-trigger",
    "description": "curl trigger",
    "repository_event_config": {
      "repository": "REPO_NAME",
      "repository_type": "GITLAB",
      // Field filter must be only one of the following:
      "pullRequest": "PULL_REQUEST_FILTER",
      "push": "PUSH_FILTER"
    }
}

ここで

  • REPO_NAME」は、Cloud Build で構成したリポジトリ接続の名前です。
  • PULL_REQUEST_FILTER」は PullRequestFilter のインスタンスです。これは、一致する pull リクエストが GitLab で作成されたときに Cloud Build がビルドをトリガーできるようにするフィルタを定義します。
  • PUSH_FILTER」は PushFilter のインスタンスです。これは、一致する push が GitLab で行われたときに Cloud Build がビルドをトリガーできるようにするフィルタを定義します。

ターミナルで、次の 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 です。

データ共有

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

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

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

次のステップ