♾️

Cloud Run ジョブを Cloud Build で CI/CD する

2023/12/11に公開

2023年は「Cloud Run を触って覚える」をテーマとした一人アドベントカレンダーを一人で開催しており、Cloud Run のさまざまな機能や、Cloud Run でよく使う構成などを実際の使い方と一緒にご紹介しています。

https://qiita.com/advent-calendar/2023/cloud-run

11日目は Cloud Run ジョブに使用するアプリケーションを CI/CD するに手順ついて解説します。Cloud Run ジョブの概要や基本的な使い方については次の記事を参照してください。

https://zenn.dev/google_cloud_jp/articles/cloudrun-jobs-basic

Cloud Run の概要は技術評論社さまのブログ「gihyo.jp」に寄稿した記事で解説していますのでこちらもぜひご覧ください。

https://gihyo.jp/article/2023/10/modern-app-development-on-google-cloud-03

Cloud Run ジョブを CI/CD

この記事では Cloud Run ジョブに CI/CD するために、Cloud Build を使います。GitHub のリポジトリをトリガーとし、main リポジトリにプッシュされたら Cloud Build 経由でコンテナ イメージをビルドし、Cloud Run ジョブに更新をかけます。

GitHub リポジトリを用意する

まずは GitHub リポジトリを用意しましょう。こちらの記事 で使用したサンプル アプリケーションを使います。

https://github.com/suwa-yuki/cloudrun-jobs-sample

フォークして、自分のリポジトリとして管理できるようにします。

フォーク

リポジトリ内に cloudbuild.yaml を新規作成します。 _IMAGE_JOB_NAME_REGION をご自身の環境に合わせて変更してください。

cloudbuild.yaml
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 のコンソールを開きます。

https://console.cloud.google.com/cloud-build/repositories/1st-gen

[リポジトリを接続] をクリックします。

リポジトリの接続

[ソースコード管理プロバイダ] に [GitHub] を選びます。GitHub へのアプリ登録が行われていない場合は GitHub アプリとして Cloud Build を登録します(GitHub アカウントへの認証が必要になります)。

ソースコード管理プロバイダの設定

[リポジトリ] は先ほどフォークしたリポジトリを設定します。

リポジトリの設定

[トリガーの作成] をクリックし、続けてトリガーの作成に移ります。

トリガーの作成

トリガーの作成

続けてトリガーを作成します。[名前] は任意の名前にします。

トリガーの名前

リポジトリ経由で作成する場合、[リポジトリ] がすでに設定されていることを確認します。またデフォルトでは main リポジトリを対象にしていることを確認します。

リポジトリとブランチの確認

[構成] ではビルドコマンドなどの一連のステップの構成をファイル、またはインラインで設定します。[自動検出] を設定すると、リポジトリから cloudbuild.yaml または Dockerfile を検出します。ここではリポジトリにすでに用意しているので [自動検出] を選びます。

構成の設定

最後に [作成] をクリックします。

構成の設定

Cloud Run ジョブの更新を確認する

cloudbuild.yaml には、ジョブ更新と同時に実行するオプションを設定していました。そのため Cloud Run ジョブのコンソールを確認するとジョブが作成され、かつ実行されていることが確認できます。

ジョブの状態の確認

タスクの実行数を指定していないので、1 つのタスクだけ実行されていることが確認できます。

実行したタスクの確認

cloudbuild.yaml を編集してみましょう。以下は --tasks でタスク数を指定しています。

cloudbuild.yaml
# 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 で実行されていることが確認できました。

実行したタスクの確認

コマンドのオプションは下記も参照してください。

https://cloud.google.com/sdk/gcloud/reference/beta/run/jobs/deploy

まとめ

Cloud Run ジョブに CI/CD する方法について解説しました。実際の運用を考えると Git リポジトリから CI/CD できる構成は必須だと思うので、この記事を参考にして構成してみてください。

Google Cloud Japan

Discussion