1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Run Jobs で「直したのに直っていない」→ ジョブはビルド済みのイメージを動かすだけ。実行前にイメージの commit を確かめる

1
Posted at

データを入れ直す Cloud Run Jobs のジョブで、既定値(書き込み先の URL)の間違いに気づきました。手元のソースを直して、そのまま gcloud run jobs execute で実行しました。

結果は直す前と同じ、間違った値での上書きでした。直したつもりで実行したので、壊れた値を自分でもう一度書き込んだことになります。

原因

Cloud Run Jobs は、ジョブを作った(更新した)ときに指定したコンテナイメージをそのまま動かすだけです。手元のソースを直しても、イメージをビルドし直してジョブに設定し直さない限り、実行されるのは古いコードです。

当たり前のことですが、「直した → 実行した → 直っているはず」と続けて手を動かすと見落とします。

確かめ方:実行前にイメージの commit を見る

イメージのタグに git の commit(短い sha)を入れているなら、ジョブが今どのイメージを使っているかを見て、直した commit を含んでいるかを git で確かめます。

# ジョブが使っているイメージ(例:.../my-job:17449d2)
gcloud run jobs describe my-job --region asia-northeast1 \
  --format="value(spec.template.spec.template.spec.containers[0].image)"

# 直した commit がイメージの commit に含まれているか(含まれていれば終了コード 0)
git merge-base --is-ancestor <直したcommit> 17449d2 && echo "含む" || echo "含まない"

「含まない」なら、イメージをビルドし直してジョブを更新してから実行します。

急ぐとき:その実行だけ環境変数で上書きする

直したい値がコードの中の既定値で、コードが環境変数を先に読む作り(process.env.TARGET_URL ?? 既定値 のような形)なら、ビルドし直さずにその実行だけ値を差し替えられます。

gcloud run jobs execute my-job --region asia-northeast1 \
  --update-env-vars=TARGET_URL=https://example.com/correct

この上書きはその実行にだけ効き、ジョブの定義は変わりません。次に普通に実行すると古い既定値に戻るので、イメージのビルドし直しは別に必ずやります。

コードが環境変数を読まない作りだと、この方法は効きません。先にコードを確かめます。

まとめ

  • Cloud Run Jobs は設定されたイメージを動かすだけ。手元の修正は、ビルドしてジョブを更新するまで届かない
  • 実行前に jobs describe でイメージを見て、git merge-base --is-ancestor で修正を含むか確かめる
  • 急ぎなら execute --update-env-vars でその実行だけ上書きできる。ただし根本の直しは別にやる

生成AI(Claude Code)に書かせて一人で会社を回している記録を note に書いています。
https://note.com/kaito_cometa

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?