コンテンツに移動
アプリケーション開発

Cloud Build リポジトリ(第 2 世代)による GitLab リポジトリの CI / CD

2023年8月28日
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 リポジトリを作成するには、次の手順に沿って操作します。

  1. GitLab.com にプライベート リポジトリを作成します。ここでは名前として「cloud-build-demo」を使用します。

  2. レポジトリの URI を変数 GITLAB_REPO_URI として保存します。この例では GITLAB_REPO_URI='https://gitlab.com/<USER>/cloud-build-demo.git' となります(ワークステーションへのローカル クローンには SSH を使用できますが、以下の Cloud Build リポジトリには HTTPS を使用します)。

  3. ターミナル(例: 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] > [リポジトリ] に表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_repo-connection.max-1300x1300.png

シンプルなパイプラインとリポジトリのトリガーをテストするために、サンプル リポジトリに空の commit を push します。

読み込んでいます...

Google Cloud コンソールの Cloud Build ダッシュボードに、開始されたビルドが表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_build-result.max-900x900.png

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

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_gitlab-pipeline.max-500x500.png

次のステップ

Cloud Build リポジトリの詳細と、第 1 世代と第 2 世代のリポジトリの機能の比較については、公式の Cloud Build リポジトリに関するドキュメントをご覧ください。GitHub でホストされている Git リポジトリを Cloud Build で使用する場合は、こちらの手順に沿って Terraform を構成する必要があります。

- アプリケーション モダナイゼーション担当 EMEA ソリューション リード Daniel Strebel

投稿先