データを入れ直す 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