docker/build-push-action@v3 + GCP のデプロイエラーを何とかした覚書
3 行まとめ
- 2023 年 1 月 14 日以降しばらくの間、GitHub Actions を用いて Cloud Run 等へデプロイする際に「コンテナイメージが見つからない」といった類のエラーメッセージが出たら、
docker/build-push-action@v3
の利用を疑ってみる -
provenance
に未対応のレジストリを使っているのがわかったら、provenance: false
をインプットとして指定すると、治るかもしれない - Cloud Run の場合、エラーメッセージが出た時点で異常な状態のリビジョンを作成してしまっている場合があるので、念のためチェックして、必要であれば異常なリビジョンを削除するとよい
2022.2.9 追記
docker/build-push-action@v4
で provenance: false
がデフォルトになったようです。
エラー発生
2023 年 1 月 20 日の昼下がり、GitHub Actions くんが Cloud Run で動くステージング環境にプロダクトの最新バージョンをデプロイしようとしていたところ、次のようなエラーが起きて、失敗してしまいました。
Updating Cloud Run job [xxxxxxxxx] in project [yyyyyyyy] region [asia-northeast1]
Updating job...
failed
Job failed to deploy
ERROR: (gcloud.beta.run.jobs.update) Image 'asia-northeast1-docker.pkg.dev/zzzzzzzz/aaaaa/bbbbb' not found.
Error: Process completed with exit code 1.
これは何でしょう。権限が足りないか何かでしょうか。しかし調べてみても、権限周りの問題ではなさそうです。
build-push-action の機能追加が原因らしい
そんな折、こんなツイートが見つかりました。
docker/build-push-action
といえば、コンテナイメージにタグを打ってくれたりするやつだったでしょうか(雑な理解)。
provenance
という機能がデフォルトでオンになったんだけど、多くのコンテナレジストリ(GCP の Container Registry など含む)は未対応なので落ちまくってるよ、みたいな話っぽい。
なるほど、機能追加ということであれば、最新の docker/build-push-action@v3.3.0
のリリースノートを見てみましょう。
確かに provenance
という inputs が追加されてますね。おや、何か注意書きが……
Clour Run や AWS Lambda(と、それらと共に使うレジストリ)でエラーが起きるかもね、と注意書きされています。どうやら他の人も困っていたことのようです。
修正してみる
docker/build-push-action
に provenance: false
を指定すれば治りそうです。えいやっ。
- name: Build and push
uses: docker/build-push-action@v3
with:
context: xxxx
+ provenance: false
push: true
tags: |
xxxx
yyyyy
cache-from: type=gha
cache-to: type=gha,mode=max
筆者の環境の場合、ステージング環境はこれで治りました。
異常なリビジョンを削除する
ですが、本番環境は何故かデプロイが完了しません。何だろう……
他にも何か問題があるのかなと、Cloud Run のコンソールを見に行ってみます。
なかなか見かけない状態になっていました。 provenance: true
状態でデプロイタスクを走らせた際に生まれたリビジョンが異常な状態になり、ルーティングの完了を阻害していたようです。
❗️ がついているリビジョンを消してみましょう。
コンソールが見慣れた状態に戻りました!
解決
この状態になってから、再度本番環境へのデプロイタスクを走らせたところ、無事に最新バージョンが公開されました。めでたし。
まとめ
筆者が関わっている本業と副業の両方で発生したので、おそらく影響範囲は広いだろうなと思い、記事にしてみました。
provenance
自体は良い機能らしい(しらんけど)ので、将来、レジストリ側が対応したときには provenance: true
にできるよう、たまに動向を見ておいたほうがいいかもしれません。
それでは。
Discussion
Nkznさん、こんにちは。
同じエラーで困っていたところ、当記事を発見しました。
大変参考になりました。ありがとうございます。
ところで、記事中に
とありますが https://github.com/docker/build-push-action/releases/tag/v4.0.0 を読むと
とあるのでDefaultは有効のままではないでしょうか?
現在最新のv6での動作ですが、
provinceを設定しない場合のbuildのオプションは
--attest type=provenance
でprovinceを明示的にfalseとすると
--attest type=provenance,disabled=true
となりました。
お役に立てれば幸いです。