このページでは、GitLab ホストを Cloud Build に接続する方法について説明します。
始める前に
-
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 theserviceusage.services.enablepermission. Learn how to grant roles.
GitLab ホストに接続する
GitLab インスタンスのホスト接続を作成する前に、次の手順で GitLab に個人用アクセス トークンを作成する必要があります。
GitLab インスタンスにログインします。
インスタンスの GitLab ページで、右上のアバターをクリックします。
[プロフィールを編集] をクリックします。
左側のサイドバーで [アクセス トークン] を選択します。
[個人用アクセス トークン] ページが表示されます。
スコープが
apiのアクセス スコープを作成して、リポジトリの接続と切断に使用します。スコープが
read_apiのアクセス トークンを作成して、Cloud Build リポジトリがリポジトリ内のソースコードにアクセスできるようにします。
コンソール
GitLab ホストを Cloud Build に接続するには:
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリ] ページが表示されます。
ページ上部の [第 2 世代] タブを選択します。
上部のバーにあるプロジェクト セレクタで、 Google Cloud プロジェクトを選択します。
[ホスト接続の作成] をクリックして、新しいホストを Cloud Build に接続します。
左側のパネルで、ソース プロバイダとして Bitbucket を選択します。
[接続の構成] セクションで、次の情報を入力します。
[リージョン]: 接続のリージョンを選択します。
[名前]: 接続の名前を入力します。
[ホストの詳細] セクションで、次の情報を選択または入力します。
- GitLab プロバイダ: プロバイダとして [GitLab.com] を選択します。
[個人用アクセス トークン] セクションで、次の情報を入力します。
API アクセス トークン: スコープ アクセスが
apiのトークンを入力します。このトークンは、リポジトリの接続と切断に使用されます。Read API アクセス トークン: スコープ アクセスが
read_apiのトークンを入力します。Cloud Build トリガーは、このトークンを使用してリポジトリ内のソースコードにアクセスします。
[接続] をクリックします。
[接続] ボタンをクリックすると、個人用アクセス トークンが Secret Manager に安全に保存されます。ホスト接続後、Cloud Build はユーザーに代わって Webhook シークレットも作成します。シークレットは、Secret Manager ページで確認および管理できます。
これで、GitLab 接続が正常に作成されました。
gcloud
GitLab ホストを Cloud Build に接続する前に、次の手順で認証情報を保存します。
次のコマンドを実行して、Secret Manager で Webhook シークレットを作成します。
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create my-gle-webhook-secret --data-file=-ホスト接続の作成に使用するように計画するプロジェクトとは異なる Google Cloud プロジェクトにシークレットを保存する場合は、次のコマンドを入力して、プロジェクトに Cloud Build サービス エージェントへのアクセス権限を付与します。
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" 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 に接続するには:
次のコマンドを入力して、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 アクセス トークンをローテーションする
GitLab アクセス トークンの有効期限が切れると、Cloud Build ホスト接続が GitLab リポジトリから切断されます。そのため、次のような状況でエラーが発生します。
GitLab リポジトリの Cloud Build 接続をリンクしようとすると、
Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connectionメッセージが表示されます。[トリガー] ページで [実行] をクリックすると、[トリガーを実行] ページが開き、
Failed to list branches. You can still enter one manuallyメッセージが表示されます。
接続の古いトークンまたは有効期限切れのトークンをローテーションするには、次の操作を行います。
ホスト接続に関連付けられているシークレットを見つけます。
次のコマンドを実行します。
gcloud builds connections describe CONNECTION_PATH --region=REGIONここで
- CONNECTION_PATH は、Cloud Build の GitLab ホスト接続のパスです(
projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME形式)。 - REGION は、接続のリージョンです。
- CONNECTION_PATH は、Cloud Build の GitLab ホスト接続のパスです(
コマンドの出力で、ユーザー トークン フィールドの値を探します。
readAuthorizerCredential.userTokenSecretVersionはread_apiトークンの Secret Manager 名を示し、authorizerCredential.userTokenSecretVersionはapiトークンの Secret Manager 名を示します。これらの名前は Secret Manager にシークレットとして保存されます。
GitLab で各アクセス トークンをローテーションします。
Cloud Build ホスト接続に接続されている GitLab リポジトリに移動します。
GitLab ドキュメントの手順に沿って、アクセス トークンをローテーションします。トークンをローテーションすると、GitLab は新しい認証情報で新しいトークンを作成し、そのトークンの以前のバージョンを無効にします。ローテーションされたトークンには、元のトークンと同じ権限とスコープがあります。
ローテーションされたトークンの ID をコピーします。
トークンごとに新しいシークレット バージョンを作成します。
Google Cloud コンソールで [Secret Manager] ページを開きます。
ローテーションしたトークンごとに、ステップ 1 で特定したシークレット名を見つけて [アクション] をクリックし、[新しいバージョンを追加] をクリックします。
[新しいバージョンを追加] ウィンドウで、ローテーションされたトークンの ID を入力し、[新しいバージョンを追加] をクリックします。
次のステップ
- GitLab リポジトリに接続する方法を確認する。
- GitLab パイプラインで Google マネージド CI / CD コンポーネントを使用して、ワークロードをビルドして Google Cloud にデプロイする方法を確認する。 Google Cloudの GitLab をご覧ください。