Cloud Run ジョブを Cloud Build で CI/CD する
2023年は「Cloud Run を触って覚える」をテーマとした一人アドベントカレンダーを一人で開催しており、Cloud Run のさまざまな機能や、Cloud Run でよく使う構成などを実際の使い方と一緒にご紹介しています。
11日目は Cloud Run ジョブに使用するアプリケーションを CI/CD するに手順ついて解説します。Cloud Run ジョブの概要や基本的な使い方については次の記事を参照してください。
Cloud Run の概要は技術評論社さまのブログ「gihyo.jp」に寄稿した記事で解説していますのでこちらもぜひご覧ください。
Cloud Run ジョブを CI/CD
この記事では Cloud Run ジョブに CI/CD するために、Cloud Build を使います。GitHub のリポジトリをトリガーとし、main
リポジトリにプッシュされたら Cloud Build 経由でコンテナ イメージをビルドし、Cloud Run ジョブに更新をかけます。
GitHub リポジトリを用意する
まずは GitHub リポジトリを用意しましょう。こちらの記事 で使用したサンプル アプリケーションを使います。
フォークして、自分のリポジトリとして管理できるようにします。
リポジトリ内に cloudbuild.yaml
を新規作成します。 _IMAGE
、_JOB_NAME
、_REGION
をご自身の環境に合わせて変更してください。
substitutions:
_IMAGE: 'cloudrun-jobs-sample'
_JOB_NAME: 'cloudrun-jobs-sample'
_REGION: 'asia-northeast1'
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/$_IMAGE', '.']
# Push the container image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/$_IMAGE']
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'jobs'
- 'deploy'
- '$_JOB_NAME'
- '--image'
- 'gcr.io/$PROJECT_ID/$_IMAGE'
- '--region'
- '$_REGION'
- '--execute-now'
images:
- gcr.io/$PROJECT_ID/$_IMAGE
Cloud Build を設定する
次に Cloud Build の設定です。Cloud Build では、リポジトリとトリガーを設定します。
リポジトリの作成
まずはリポジトリの作成です。Cloud Build のコンソールを開きます。
[リポジトリを接続] をクリックします。
[ソースコード管理プロバイダ] に [GitHub] を選びます。GitHub へのアプリ登録が行われていない場合は GitHub アプリとして Cloud Build を登録します(GitHub アカウントへの認証が必要になります)。
[リポジトリ] は先ほどフォークしたリポジトリを設定します。
[トリガーの作成] をクリックし、続けてトリガーの作成に移ります。
トリガーの作成
続けてトリガーを作成します。[名前] は任意の名前にします。
リポジトリ経由で作成する場合、[リポジトリ] がすでに設定されていることを確認します。またデフォルトでは main
リポジトリを対象にしていることを確認します。
[構成] ではビルドコマンドなどの一連のステップの構成をファイル、またはインラインで設定します。[自動検出] を設定すると、リポジトリから cloudbuild.yaml
または Dockerfile
を検出します。ここではリポジトリにすでに用意しているので [自動検出] を選びます。
最後に [作成] をクリックします。
Cloud Run ジョブの更新を確認する
cloudbuild.yaml
には、ジョブ更新と同時に実行するオプションを設定していました。そのため Cloud Run ジョブのコンソールを確認するとジョブが作成され、かつ実行されていることが確認できます。
タスクの実行数を指定していないので、1 つのタスクだけ実行されていることが確認できます。
cloudbuild.yaml
を編集してみましょう。以下は --tasks
でタスク数を指定しています。
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'jobs'
- 'deploy'
- '$_JOB_NAME'
- '--image'
- 'gcr.io/$PROJECT_ID/$_IMAGE'
- '--tasks'
- '20'
- '--region'
- '$_REGION'
- '--execute-now'
ジョブが更新され、タスク数 20 で実行されていることが確認できました。
コマンドのオプションは下記も参照してください。
まとめ
Cloud Run ジョブに CI/CD する方法について解説しました。実際の運用を考えると Git リポジトリから CI/CD できる構成は必須だと思うので、この記事を参考にして構成してみてください。
Discussion