← ./articles-ja

WranglerがDeployment complete後にexit code 1を返す時は再試行前に確認する

デプロイコマンドが、成功と失敗を同時に示すことがあります。

Wranglerが Deployment complete! と表示した後で、プロセスのexit codeだけが 1 になるケースです。exit codeだけを見ると、既に公開済みのデプロイを何度も再実行してしまいます。成功表示だけを見ると、本当の失敗を見逃します。

成功表示とexit codeが矛盾する

典型的にはこうです。

✨ Deployment complete!

その後、npm scriptやCIがexit code 1 を見て失敗扱いにします。

通常、非ゼロexitは失敗として扱うべきです。ただしデプロイCLIでは、ローカルプロセスの終了状態だけでなく、リモート側に何が公開されたかも確認する必要があります。

build成功とdeploy成功を分ける

まず、静的出力が新しいことを確認します。

Remove-Item -Recurse out -ErrorAction SilentlyContinue
npm run build
Get-ChildItem out

out/ が作られていないならbuild問題です。out/ が新しく、Wranglerが完了表示を出したなら、次に見るべきはCloudflare側の公開状態です。

Cloudflareのdeploymentと公開URLを見る

deployment listを確認します。

npx wrangler pages deployment list --project-name my-site

次に公開URLを確認します。

$resp = Invoke-WebRequest https://my-site.pages.dev/ -UseBasicParsing
$resp.StatusCode

RSSやsitemap、今回変えた記事URLなど、更新を証明できるURLも確認します。

Invoke-WebRequest https://my-site.pages.dev/feed.xml -UseBasicParsing
Invoke-WebRequest https://my-site.pages.dev/sitemap.xml -UseBasicParsing

判断を分ける

次のように分類します。

  • buildが失敗した: アプリかbuild環境を見る
  • upload前にWranglerが落ちた: cwd、認証、出力パスを見る
  • upload完了後にexit codeだけおかしい: 公開状態を確認して記録する
  • 公開URLが古い: CLI表示に関係なくデプロイ失敗として扱う

CIではexit code 1 を失敗にするのが普通です。ただし人間の対応としては、production URLが更新済みなら「アプリ修正」ではなく「CLI状態の不一致」として扱います。

ログに残すもの

再発時のために、次を残します。

  • Wrangler version
  • Node version
  • OS
  • 実行したdeploy command
  • Deployment complete が出たか
  • exit code
  • deployment listの最新行
  • 公開URLのHTTP status

「なんとなくデプロイ失敗」ではなく、どの層で矛盾したかを残すのが大事です。

参考