GitLab ホストに接続する

このページでは、GitLab ホストを Cloud Build に接続する方法について説明します。

始める前に

  • Cloud Build API と Secret Manager API を有効にします。

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

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

    API を有効にする

GitLab ホストに接続する

GitLab インスタンスのホスト接続を作成する前に、次の手順で GitLab に個人用アクセス トークンを作成する必要があります。

  1. GitLab インスタンスにログインします。

  2. インスタンスの GitLab ページで、右上のアバターをクリックします。

  3. [プロフィールを編集] をクリックします。

  4. 左側のサイドバーで [アクセス トークン] を選択します。

    [個人用アクセス トークン] ページが表示されます。

  5. スコープが api のアクセス トークンを作成して、リポジトリの接続と切断に使用します。

  6. スコープが read_api のアクセス トークンを作成して、Cloud Build リポジトリがリポジトリ内のソースコードにアクセスできるようにします。

コンソール

GitLab ホストを Cloud Build に接続するには:

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

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

    [リポジトリ] ページが表示されます。

  2. ページ上部の [第 2 世代] タブを選択します。

  3. 上部のバーにあるプロジェクト セレクタで、 Google Cloud プロジェクトを選択します。

  4. [ホスト接続の作成] をクリックして、新しいホストを Cloud Build に接続します。

  5. 左側のパネルで、ソース プロバイダとして Bitbucket を選択します。

  6. [接続の構成] セクションで、次の情報を入力します。

    • [リージョン]: 接続のリージョンを選択します。

    • [**名前**]: 接続の名前を入力します。

  7. [ホストの詳細] セクションで、[GitLab ホスト] に移動して [GitLab.com] を選択します。

  8. 省略可: GitLab リポジトリのアクセス トークンの暗号化に使用する暗号鍵を管理する場合は、[暗号化] セクションに移動して Cloud Key Management Service 鍵を選択します。 詳細については、 Secret Manager の顧客管理の暗号鍵を有効にするをご覧ください。

  9. [個人用アクセス トークン] セクションで、次の情報を入力します。

    • API アクセス トークン: スコープ アクセスが api のトークンを入力します。このトークンは、リポジトリの接続と切断に使用されます。

    • Read API アクセス トークン: スコープ アクセスが read_api のトークンを入力します。Cloud Build トリガーは、このトークンを使用してリポジトリ内のソースコードにアクセスします。

  10. [接続] をクリックします。

    [**接続**] ボタンをクリックすると、個人用アクセス トークンが Secret Manager に安全に保存されます。 ホスト接続後、Cloud Build はユーザーに代わって Webhook シークレットも作成します。シークレットは、 Secret Manager ページで確認および管理できます。

これで、GitLab 接続が正常に作成されました。

gcloud

GitLab ホストを Cloud Build に接続する前に、次の手順で認証情報を保存します。

  1. Secret Manager にトークンを保存します

  2. Secret Manager で Webhook シークレットを作成するには、次のコマンドを実行します。

     cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-
    
  3. ホスト接続の作成に使用するように計画するプロジェクトとは異なる Google Cloud プロジェクトにシークレットを保存する場合は、次のコマンドを入力して、プロジェクトに Cloud Build サービス エージェントへのアクセス権限を付与します。

    PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild."
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
      --role="roles/secretmanager.admin"
    

    説明:

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

これで、GitLab ホストを Cloud Build に接続できるようになりました。

次の手順を行います。

GitLab ホストを Cloud Build に接続するには:

  1. 次のコマンドを入力して、GitLab 接続を作成します。

    gcloud builds connections create gitlab CONNECTION_NAME \
      --host-uri=HOST_URI \
      --project=PROJECT_ID \
      --region=REGION \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/API_TOKEN/versions/SECRET_VERSION \
      --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \
      --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION
    

    説明:

    • CONNECTION_NAME は、Cloud Build での GitLab ホスト接続の名前です。
    • HOST_URI は GitLab インスタンスの URI です。例: https://my-gle-server.net
    • PROJECT_ID は Google Cloud プロジェクト ID です。
    • REGION は、接続のリージョンです。
    • API_TOKEN は、スコープが api のトークンの名前です。
    • READ_TOKEN は、スコープが read_api のトークンの名前です。
    • SECRET_VERSION はシークレットのバージョンです。
    • WEBHOOK_SECRET は Webhook シークレットです。

これで、GitLab 接続が正常に作成されました。

古い GitLab アクセス トークンまたは期限切れの GitLab アクセス トークンをローテーションする

Cloud Build ホスト接続が GitLab リポジトリへの接続を維持できるように、アクセス トークンをローテーションします。 GitLab アクセス トークンの有効期限が切れると、Cloud Build ホスト接続が GitLab リポジトリから切断されます。この場合、期限切れのトークンをローテーションするまで、接続を無効にしたり、リポジトリをリンクしたりすることはできません。また、次のような状況でエラーが発生します。

  • 接続の [接続の詳細] ページに、Connection is disconnected due to an invalid or expired access token というエラー メッセージが表示されます。

  • 期限切れのトークンを持つ接続にリポジトリをリンクしようとすると、[無効なアクセス トークン] メッセージが表示されます。[接続を表示] をクリックすると、期限切れのトークンを持つ接続の [接続の詳細] ページに移動します。

Cloud Build では、新しいトークン値を入力して、それらのトークンの最新のシークレット バージョンで Secret Manager に保存することで、アクセス トークンをローテーションできます。アクセス トークンをローテーションする手順は次のとおりです。

  1. GitLab で各アクセス トークンをローテーションします。

    1. Cloud Build ホスト接続に接続されている GitLab リポジトリに移動します。

    2. GitLab ドキュメントの手順に沿って、アクセス トークンを ローテーションします。 トークンをローテーションすると、GitLab は新しい認証情報で新しいトークンを作成し、そのトークンの以前のバージョンを無効にします。ローテーションされたトークンには、元のトークンと同じ権限とスコープがあります。

    3. ローテーションされたトークンの ID をコピーします。

  2. Cloud Build でアクセス トークンを更新します。

    1. 接続の [接続の詳細] ページに移動します。

    2. [アクセス トークンを更新] を選択します。

    3. [トークンのローテーション] メニューで、[API アクセス トークン] フィールドと [読み取りアクセス トークン] フィールドに新しいトークンを入力します。

    4. (省略可)接続でトークンの最新バージョンのシークレットを常に使用する場合は、[常に最新バージョンを使用するように接続を更新する] を選択します。接続で特定のシークレット バージョン番号を使用する場合は、このオプションを選択しない方がよい場合があります。

    5. [更新] を選択して、変更を保存します。

      Cloud Build は、新しいアクセス トークンを Secret Manager のシークレットの最新バージョンとして保存します。

詳細については、GitLab ドキュメントの アクセス トークンの有効期限をご覧ください。

次のステップ

  • GitLab リポジトリに接続する方法を確認する。
  • GitLab パイプラインで Google マネージド CI / CD コンポーネントを使用して、ワークロードをビルドして Google Cloud にデプロイする方法を確認する。 Google Cloudの GitLab をご覧ください。