cloudflare-workers-cd-rollback について
Cloudflare Workers のデプロイ用 GitHub Actions ワークフローテンプレートを提供するスキルです。Cloudflare CI/CD を整えるプロジェクト向けで、既存のトラフィック配分を記録し、スモークテスト失敗時の復元を試みます。
主な機能
- 01staging と production へのデプロイ
- 02デプロイ前のトラフィック配分保存
- 03D1 マイグレーションとビルド
- 04デプロイ後のスモークテスト
- 05失敗時の以前の配分への復元
活用シーン
- 01Workers の GitHub Actions リリース設定
- 02スモークテスト失敗後の以前のバージョンへの復元
- 03リリース前のバンドルと dry-run の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mizchi/ skills --skill cloudflare-workers-cd-rollbackインストール後、Claude Code で/cloudflare-workers-cd-rollbackを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdassets/scripts/deployment-state.test.tsdeployment-state.tssmoke.tsassets/workflows/cd-production.ymlcd-staging.ymldeploy.ymlreferences/cd-traps.md詳細
自動ロールバック付き Cloudflare Workers CD
3 つのワークフローテンプレートを cf、Node.js 24、pnpm とともに使用します。~/ghq/github.com/mizchi/cf-example にある cf-example では、現在の Vite/config/typegen の統合例を確認できます。このスキルでは、デプロイ状態の保存とロールバックを追加します。
push main/release → staging/production caller → deploy.yml
→ capture previous traffic versions as JSON
→ cf d1 migrations apply DATABASE_ID --dir db/migrations
→ MoonBit build + FFI preparation
→ cf workers types + cf build --mode <target>
→ bundle check + cf deploy --prebuilt --mode <target> --dry-run
→ cf deploy --prebuilt --mode <target>
→ smoke
→ on failure: cf workers deployments create with the saved traffic array
→ report + fail the workflow when smoke failed
コピーと設定
assets/workflows/{deploy,cd-staging,cd-production}.yml を .github/workflows/ に、ヘルパースクリプトを scripts/ にコピーします。バンドルチェッカーはMoonBit スキルから取得し、このスキルから deployment-state.ts と smoke.ts をコピーします。
CI の実行前に、プロジェクトに cloudflare.config.ts が必要です。既存の Wrangler プロジェクトは cf migrate で移行し、その後の作業をローカルで完了してから、型付き設定とロックファイルをコミットします。CI が自動セットアップに依存しないようにしてください。
以下を設定します。
- DevDependencies:
cf、@cloudflare/vite-plugin@beta、Vite、TypeScript、@dotenvx/dotenvx。 build:coreパッケージスクリプト:moon build --target js --release && node scripts/prepare-worker.ts。TypeScript のみのプロジェクトでは MoonBit のインストール/ビルド手順を削除し、cf build を直接使用します。smokeパッケージスクリプト:node scripts/smoke.ts。プロジェクト固有のパス/ステータスの期待値を設定します。- GitHub 変数
D1_DATABASE_ID_PRODUCTION、D1_DATABASE_ID_STAGING、WORKERS_SUBDOMAIN。省略可能なWORKER_NAME_PRODUCTIONとWORKER_NAME_STAGINGのデフォルト値は、それぞれcf-mbt-appとcf-mbt-app-stagingです。これらの名前と ID は、対応する設定モードに合わせます。 CLOUDFLARE_API_TOKENとCLOUDFLARE_ACCOUNT_IDを含む暗号化済みの.env.cloudflare。GitHub シークレットDOTENV_PRIVATE_KEY_CLOUDFLAREで復号します。スモークテストの認証情報も、このファイルから取得できます。
D1 がない場合や、複数のデータベースがある場合は、D1 の手順を調整してください。cf では ID が必要で、デフォルトでリモートが使用されます。--dir でマイグレーションディレクトリを指定します。互換性のあるスキーママイグレーションを使用してください。Worker のロールバックではデータベースの変更は元に戻りません。
ビルドとビルド済み成果物のデプロイでは、同じモードを使用します。bindings.secret() を有効にする場合は、ドライランチェック用のモック値と、公開時に適切な無視対象または復号済みの --secrets-file を指定してください。CLI の認証情報だけでは、Worker のバインディングにはなりません。
ロールバックの仕様
cf API の出力は stdout に JSON で出力され、進行状況/エラーは stderr に出力されます。デプロイ一覧では、最新のアクティブなデプロイが先頭に表示されます。これは旧 Wrangler のテキスト表示順とは異なります。deployment-state.ts はレスポンスを検証し、段階的な分割を含む完全な {version_id, percentage}[] の割り当てを保存します。不正なデータの場合は、古いデプロイを選ばずに拒否します。
正常に取得できた空の一覧、または特定の Worker 不在エラー 10007 は初回デプロイを意味します。この場合は [] を保存し、ロールバックをスキップしてスモークテストの失敗を報告します。認証、権限、ネットワーク、解析の各エラーでは、デプロイ前に中止します。一覧取得の失敗をすべて初回デプロイとして扱わないでください。
スモークテストが失敗した場合は、保存した割り当てを cf workers deployments create --worker <name> --strategy percentage --versions @file で復元します。シークレットの変更が原因でロールバックが拒否された場合に回避できるよう、--force を自動的に追加しないでください。初回デプロイでは以前のバージョンに戻せません。ターゲットモードごとにデプロイを直列化してください。他のデプロイパイプラインがこのワークフローと競合しないようにします。
メッセージは環境変数を通じてシェルのステップに渡します。コミット本文や任意のディスパッチ入力をシェルのソースに直接埋め込まないでください。ラッパーは dotenvx のキーの有無に応じてデプロイを制御し、cloudflare.config.ts と vite.config.ts の変更を監視します。
検証
deployment-state のテストでは、最新のデプロイが先頭にある場合、段階的なトラフィック、初回デプロイ、不正なデータ/API エラーを検証します。コピーしたワークフローを有効にする前に、YAML を検証し、ドライランを実行してください。情報源と制限事項:cd-traps.md、cf API ガイド。