🤖

Cloud Build でのビルドと Cloud Run へのデプロイを自動化

2024/05/31に公開

事の始まり

Cloud Run で動作する 社内向け Web ツールをサクッとごく短期間で開発するタイミングがあり、
Dockerfile のビルドと Cloud Run へのデプロイは費用対効果を考えて手動で行なっていましたが、
開発が加速してビルド / デプロイ 作業がボトルネックになり始めたので、
GitHub の当該ブランチへの push をトリガーとした簡易的 CD をサクッと構築することになりました。

前提

  • 以下の API が有効化されていること
    • Cloud Run
    • Cloud Build
    • Artifact Registry
  • Cloud Build と GitHub リポジトリの接続設定が済んでいること
  • Artifact Registry リポジトリの作成が済んでいること

自動化する内容

  1. GitHub で 当該ブランチへの push で Cloud Build のトリガー発動
  2. GitHub内の Dockerfile をビルド
  3. Build したイメージを Artifact Registry にプッシュ
  4. Artifact Registry にプッシュしたイメージを Cloud Run にデプロイ

手順

cloudbuild.yaml 作成

Cloud Build でビルドを開始するために使用できるビルド構成ファイルを作成します。
Dockerfile のビルド、Artifact Registry へのプッシュ、Cloud Run へのデプロイを記述します。
cloudbuild.yaml は Docker ファイルと同様 GitHub リポジトリで管理します。
cloudbuild.yaml の構文に関しては以下を参照ください。
https://cloud.google.com/build/docs/build-config-file-schema?hl=ja

cloudbuild.yaml
steps:
  -
    name: gcr.io/cloud-builders/docker
    args:
      - build
      - '--no-cache'
      - '-t'
      - '$_AR_HOSTNAME/$PROJECT_ID/$_AR_REPONAME/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - .
      - '-f'
      - $_DOCKERFILE
    id: Build
  -
    name: gcr.io/cloud-builders/docker
    args:
      - push
      - '$_AR_HOSTNAME/$PROJECT_ID/$_AR_REPONAME/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
    id: Push
  -
    name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
    args:
      - run
      - $_RUN_TYPE
      - update
      - $_SERVICE_NAME
      - '--image=$_AR_HOSTNAME/$PROJECT_ID/$_AR_REPONAME/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - '--labels=managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID'
      - '--region=$_DEPLOY_REGION'
      - '--quiet'
    id: Deploy
    entrypoint: gcloud
images:
  - '$_AR_HOSTNAME/$PROJECT_ID/$_AR_REPONAME/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
options:
  substitutionOption: ALLOW_LOOSE
  logging: CLOUD_LOGGING_ONLY

以下、cloudbuild.yaml 内で定義されている代入変数です。
値の代入は Cloud Build のトリガー定義の際に行います。

代入変数名 説明
_AR_HOSTNAME リポジトリのホスト名
_AR_REPONAME リポジトリ名
_DEPLOY_REGION リージョン
_DOCKERFILE Dockerfile のパス
_RUN_TYPE Cloud Run のタイプ
_SERVICE_NAME サービス名
_TRIGGER_ID トリガーID

Cloud Build トリガー作成

Cloud Build コンソールを開き、左ペイン「トリガー」を選択、各種項目を入力します。

イベントでは「ブランチに push する」を選択します。

ソースでは Cloud Build に接続した 当該 GitHub リポジトリと対象のブランチを選択します。
今回は main ブランチを対象とします。

構成では形式は「Cloud Build 構成ファイル」 ロケーションは「リポジトリ」を選択し Cloud Build 構成ファイルの場所に GitHub プロジェクト内の cloudbuild.yaml のパスを入力します。

詳細設定では以下の代入変数を入力します。

トリガー ID (_TRIGGER_ID) は Cloud Build コンソールの URL から確認できます。

承認やサービスアカウントを必要に応じて入力し「作成」をクリックします。

Cloud Build トリガーが作成されました。

動作確認

GitHub の main ブランチに push してみると...

ビルドが走りました!
これで手動ビルド / デプロイから解放される!w

まとめ

割と少ない手順で CD を実現することができたかと思います。
今回、cloudbuild.yaml を可能な限り代入変数で定義し汎用的に使えるものにしたので、
同様の CD を構築するのがかなり楽になりました。
手軽に導入できますので、この記事を参考にして構成してみてください。


株式会社fundbookについてはこちらから

https://fundbook.co.jp/corporate/

M&Aサービスについてはこちらから

https://fundbook.co.jp/

株式会社fundbook

Discussion