Cloud Build でのビルドと Cloud Run へのデプロイを自動化
事の始まり
Cloud Run で動作する 社内向け Web ツールをサクッとごく短期間で開発するタイミングがあり、
Dockerfile のビルドと Cloud Run へのデプロイは費用対効果を考えて手動で行なっていましたが、
開発が加速してビルド / デプロイ 作業がボトルネックになり始めたので、
GitHub の当該ブランチへの push をトリガーとした簡易的 CD をサクッと構築することになりました。
前提
- 以下の API が有効化されていること
- Cloud Run
- Cloud Build
- Artifact Registry
- Cloud Build と GitHub リポジトリの接続設定が済んでいること
- Artifact Registry リポジトリの作成が済んでいること
自動化する内容
- GitHub で 当該ブランチへの push で Cloud Build のトリガー発動
- GitHub内の Dockerfile をビルド
- Build したイメージを Artifact Registry にプッシュ
- Artifact Registry にプッシュしたイメージを Cloud Run にデプロイ
手順
cloudbuild.yaml 作成
Cloud Build でビルドを開始するために使用できるビルド構成ファイルを作成します。
Dockerfile のビルド、Artifact Registry へのプッシュ、Cloud Run へのデプロイを記述します。
cloudbuild.yaml は Docker ファイルと同様 GitHub リポジトリで管理します。
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についてはこちらから
M&Aサービスについてはこちらから
Discussion