Wrangler Flagship 怎麼用?用 CLI 建立與驗證 Cloudflare feature flag
Feature flag 一旦進入正式服務,真正難維護的通常不是建立第一個旗標,而是誰可以改規則、如何驗證某個使用者拿到哪個 variation,以及出問題時能不能快速停用。Cloudflare 現在可以透過 wrangler flagship 從命令列管理 Flagship app 與 feature flags,讓這些操作能放進既有的 review、CI 和部署流程。
本文以 Cloudflare 官方在 2026-07-16 更新的 Wrangler Flagship 文件為準,整理一條可審核的 CLI 工作流:先建立 app,再建立 boolean flag,接著評估 targeting,最後才做 rollout 或停用。Flagship 的實際帳號可用性、方案與 runtime 整合仍要回到自己的 Cloudflare 控制面確認。
先確認 Wrangler 版本與登入方式
官方文件指出,wrangler flagship 需要 Wrangler v4.107.0 以上。先確認你實際執行的 CLI,而不是只看 repository 裡的 lockfile:
pnpm wrangler --version可以使用互動式登入:
pnpm wrangler login在 CI 則使用 CLOUDFLARE_API_TOKEN。權限至少拆成兩層:
| 權限 | 能做什麼 |
|---|---|
flagship:read | 列出 app、讀取 flag、評估 flag、讀取 changelog |
flagship:write | 建立、更新、刪除、啟用、停用、rollout、split |
官方提醒,多數寫入操作在修改前還會讀取目前旗標定義,因此實際執行寫入的 token 通常需要同時有 read 和 write。只做預覽或驗證的 CI 可以先使用 read-only token,避免把 flagship:write 放進每個 Pull Request。
建立 app 和第一個 boolean flag
Flagship 指令會把 app ID 放在 flags 子指令的第一個位置。第一次建立 app:
pnpm wrangler flagship apps create checkout-service \ --binding FLAGS \ --update-config--binding FLAGS 會把新建立的資源綁到 Worker 設定檔;如果你只想先在控制面建立 app,也可以不帶 binding。建立後列出 app,取得後續指令要使用的 ID:
pnpm wrangler flagship apps list --json接著建立一個預設關閉的 boolean flag:
pnpm wrangler flagship flags create <APP_ID> new-checkout --json官方文件說明,沒有另外提供 variations 時,Wrangler 會建立 on=true、off=false,並預設服務 off。這個預設值適合先把程式碼路徑部署上去,再分開決定何時開放流量。
Targeting 規則要先用 evaluate 驗證
建立旗標時可以加入 compact rule:
pnpm wrangler flagship flags create <APP_ID> premium-banner \ -V on=true \ -V off=false \ --default off \ --rule 'serve=on; when=plan equals enterprise AND country in [US,CA]; rollout=25%@user_id' \ --json規則語法有幾個容易漏掉的細節:AND、OR 要在未被引號包住時使用大寫;值裡有保留字或分隔符號時要加引號;深層條件可以改用 --rule-json。Wrangler 會驗證 compact rule 和 JSON rule 的格式,但語法通過不代表你的產品條件正確。
先用明確 context 做評估:
pnpm wrangler flagship flags evaluate <APP_ID> premium-banner \ --context plan=enterprise \ --context country=US \ --targeting-key user-42 \ --json至少要測一個符合條件和一個不符合條件的 context,再確認 percentage rollout 使用的 targeting key 在同一位使用者身上保持穩定。這裡的 evaluate 是控制面驗證,不等於已經有真實流量通過 Worker;runtime 端仍要用自己的測試請求確認 binding 和應用程式路徑。
Rollout、split 和 disable 要分開審核
當 flag 和 targeting 都驗證完,才進入流量操作。官方的 rollout 形式是:
pnpm wrangler flagship flags rollout <APP_ID> premium-banner \ --to on \ --percentage 10 \ --by user_id \ --jsonrollout 可能會取代既有 targeting rules;如果現有規則含條件,Wrangler 可能要求確認或 --force。--force 不應該只是為了讓 CI 不停下來就加上,先在 Pull Request 或變更紀錄中保留目前規則與目標流量。
需要立即關閉時,使用 disable:
pnpm wrangler flagship flags disable <APP_ID> premium-banner --json這個指令適合當 kill switch,但它不會代替事故處理。仍要記下誰執行、哪個 app/key、原本 variation 和後續恢復條件。若要查看旗標變更紀錄:
pnpm wrangler flagship flags changelog <APP_ID> premium-banner --jsonCI 寫入流程要保留 dry-run 思維
Flagship CLI 文件提供 --json 輸出,適合讓 CI 或其他腳本解析結果。可以把流程拆成三個權限階段:
- PR 檢查只做
apps list、flags get、flags evaluate,使用 read-only token。 - 合併後的變更工作流產生預計 rollout 參數,讓人審核 app ID、key、variation 和百分比。
- 正式寫入工作流才使用 write token,執行後立即讀回 flag 和 changelog。
如果 repository 需要管理多個 Cloudflare 帳號,也要把 token/profile 和工作目錄的對應寫清楚,可參考 Wrangler auth profiles 避免部署錯環境。Flagship 的 app ID 和 Worker 的 account scope 不能只靠命令列當下的預設登入狀態推測。
常見失敗不是 flag 語法,而是邊界錯了
| 現象 | 先查什麼 |
|---|---|
command not found 或沒有 Flagship 指令 | Wrangler 是否低於 4.107.0,以及實際使用的執行檔路徑 |
| 能列出 app,但不能 rollout | token 是否有 flagship:write,以及寫入操作需要的 read 權限 |
| evaluate 結果和預期不同 | --context 名稱、值、--targeting-key 與規則 priority |
| rollout 被要求確認 | 是否會取代含條件的 targeting rules;先讀取目前規則再決定是否 --force |
| CI JSON 解析失敗 | 是否混入互動式提示,刪除/rollout 等指令是否需要明確 --force |
先把控制面操作和 Worker runtime 請求分開,排錯會比把所有問題都叫成「feature flag 沒生效」更快。
結論:先讀取和評估,再把寫入權限放進流程
wrangler flagship 適合把 feature flag 操作帶進 CLI 和 CI,但可審核的重點不在指令數量,而在權限與順序:read-only 盤點、evaluate 驗證、審核 rollout、最後才保留 write token 執行。需要緊急處理時可以 disable,但仍要保留 changelog 和恢復條件。
常見問題
Q: 使用 wrangler flagship 一定要把 flag 綁到 Worker 嗎?
A: 不一定。建立 app 時可用 --binding 和 --update-config 把資源寫入 Worker 設定,也可以先只管理控制面。是否需要 runtime binding,要看你的 Worker 如何讀取 Flagship 狀態;CLI 建立 flag 和應用程式實際使用是兩個步驟。
Q: flagship:write 可以單獨授予嗎?
A: 官方文件指出,多數寫入流程也會先讀取目前旗標,因此實務上通常要同時具備 flagship:read 和 flagship:write。Pull Request 的檢查則可先只授予 read,避免所有自動化工作流都能修改正式旗標。
Q: rollout 後可以直接用 disable 當回滾嗎?
A: disable 可以快速停止某個 flag,但它不會自動保存或還原你原本的 targeting rules。執行前後都應讀取 flag、保留 changelog,並明確記下恢復 variation 和流量比例,才不會把緊急開關變成下一個設定遺失問題。
參考資料:
Cloudflare Workers Docs:Flagship Wrangler commands
Cloudflare Changelog:Manage Flagship from the command line with Wrangler
回報錯字、失效連結,或告訴我你想看的延伸主題。