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
「なんとなくデプロイ失敗」ではなく、どの層で矛盾したかを残すのが大事です。