Cloud Build リポジトリ(第 2 世代)による GitLab リポジトリの CI / CD
Google Cloud Japan Team
※この投稿は米国時間 2023 年 8 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
あらゆる本番環境の基盤となるのはソース管理です。このため、Cloud Build を自動化ツールとしてソース リポジトリと統合することは、デリバリーを高速化し、最終的にパフォーマンスの高い組織に進化するうえで不可欠です。
今回のブログ記事では、最近リリースされた第 2 世代の Cloud Build リポジトリに追加された 2 つの魅力的な新機能について取り上げます。まず、Cloud Build が GitLab と GitLab Enterprise のソースコード リポジトリに接続できるようになりました。また、リポジトリの接続を Terraform で宣言的に管理できるようになりました。ここでは、両方の機能を具体的に説明するために、シンプルなエンドツーエンドのデモを行います。
GitLab 環境の準備
このデモでは、GitLab.com でホストされているプライベート リポジトリを使用します。すでに Cloud Build 構成の GitLab リポジトリがある場合は、GITLAB_REPO_URI 変数をリポジトリの HTTPS URI に設定してから次のセクションに進んでください。
Cloud Build で試す最小設定の GitLab リポジトリを作成するには、次の手順に沿って操作します。
GitLab.com にプライベート リポジトリを作成します。ここでは名前として「cloud-build-demo」を使用します。
レポジトリの URI を変数 GITLAB_REPO_URI として保存します。この例では GITLAB_REPO_URI='https://gitlab.com/<USER>/cloud-build-demo.git' となります(ワークステーションへのローカル クローンには SSH を使用できますが、以下の Cloud Build リポジトリには HTTPS を使用します)。
- ターミナル(例: Cloud Shell またはローカル)で、次のように cloudbuild.yaml 構成を使用してリポジトリを初期化します。
これで GitLab のウェブ UI にリポジトリの内容が表示されるようになります(この例では cloudbuild.yaml ファイルのみ)。
Google Cloud での準備
まず、Cloud Build に必要な API が Google Cloud プロジェクトに用意されていて、プロジェクトで Secret Manager が有効になっていることを確認する必要があります。この例では、2 つのサービスを Terraform 構成に追加するか、ターミナルで次のコマンドを実行する必要があります。Cloud Build リポジトリは、いわゆるホスト接続のレベルで認証されます。ホスト接続の認証プロセスはソースコード リポジトリに固有であり、GitLab と GitHub でわずかに異なります。GitLab のリポジトリにアクセスするためのホスト接続の場合、api と read-api 両方のスコープ用の個人用アクセス トークンを発行する必要があります。詳細については、GitLab ホストに接続するをご覧ください。
トークンを発行したら、環境変数 GITLAB_API_TOKEN および GITLAB_READ_API_TOKEN として保存し、以下のコマンドを実行して Secret Manager でシークレットを作成できます。よく見ると、GitLab Webhook に必要なシークレットも作成されることがわかりますが、このデモでは使用しません。最後のステップで、Cloud Build サービス エージェントも、ここで作成したシークレットを使用してホスト接続を確立できるよう認可します。
注: Terraform でもこれらのシークレットを作成できますが、tfstate で書式なしテキスト値が表示されます。
Terraform での Cloud Build リポジトリとトリガーの構成
Secret Manager で認証情報を構成できたら、Terraform の構成に移ります。わかりやすくするために、次のようにすべてを 1 つの main.tf ファイルに含めました。Google Cloud プロジェクト ID 用変数、Secret Manager の外部作成されたシークレットの参照用変数、Cloud Build リソースのオプションのロケーション オーバーライド用変数を指定します。
Cloud Build 固有の Terraform リソースは次のとおりです。
google_cloudbuildv2_connection: 名前、リージョン、認証情報を使ってホスト接続を指定します。ホスト接続は複数のリポジトリで使用できるため、認証情報を一元的に管理できます。
google_cloudbuildv2_repository: 使用する GitLab リポジトリを指定し、ホスト接続と関連付けます。このためには、ホスト接続の認証情報が remote_uri として指定されたリポジトリにアクセスできなければなりません。
google_cloudbuild_trigger: GitLab リポジトリのブランチで push イベントが発生した際に Cloud Build パイプラインを実行します。
Terraform 構成を適用するために、main.tf ファイルを含むフォルダ内から次の 2 つのコマンドを実行します。
リソースが作成されると、Google Cloud コンソールの [Cloud Build] > [リポジトリ] に表示されます。


シンプルなパイプラインとリポジトリのトリガーをテストするために、サンプル リポジトリに空の commit を push します。
Google Cloud コンソールの Cloud Build ダッシュボードに、開始されたビルドが表示されます。


同じ結果が GitLab UI の [Builds] > [Pipelines] に表示されます。


次のステップ
Cloud Build リポジトリの詳細と、第 1 世代と第 2 世代のリポジトリの機能の比較については、公式の Cloud Build リポジトリに関するドキュメントをご覧ください。GitHub でホストされている Git リポジトリを Cloud Build で使用する場合は、こちらの手順に沿って Terraform を構成する必要があります。
- アプリケーション モダナイゼーション担当 EMEA ソリューション リード Daniel Strebel