批量删除 CF pages 部署
众所周知,cf pages 官方有个 bug,如果部署数量超过 100 个,将不能通过网页管理面板删除项目,必须手动一个一个删除部署,将部署数量删除到 100 个以内,才能删除项目。好在官方提供了 api 可以批量删除,本文利用 CF 官方 api 批量删除部署,且可自定义保留最新部署的数量。
资源
仓库地址
yutian81/cf-github-script · GitHub,支持作者,点个免费的 star 吧!
代码全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #!/bin/bash
API_TOKEN="" ACCOUNT_ID="" PROJECT_NAME=""
KEEP=3
if [[ -n "$1" ]]; then KEEP=$1 fi
if [[ -z "$API_TOKEN" || -z "$ACCOUNT_ID" || -z "$PROJECT_NAME" ]]; then echo "❌ 错误:请先设置 API_TOKEN, ACCOUNT_ID 和 PROJECT_NAME" exit 1 fi
all_deployments=()
page=1 per_page=20
echo "⏳ 正在获取所有部署记录..."
while true; do response=$(curl -s -H "Authorization: Bearer $API_TOKEN" \ "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects/$PROJECT_NAME/deployments?page=$page&per_page=$per_page")
deployments=$(echo "$response" | jq '.result') count=$(echo "$deployments" | jq 'length')
if [ "$count" -eq 0 ]; then break fi
ids=$(echo "$deployments" | jq -r '.[].id') all_deployments+=($ids)
((page++)) done
total=${#all_deployments[@]} echo "📦 共获取到 $total 个部署。"
keep_ids=$(printf "%s\n" "${all_deployments[@]}" | tac | head -n "$KEEP") delete_ids=$(printf "%s\n" "${all_deployments[@]}" | grep -vxFf <(echo "$keep_ids"))
if [[ -z "$delete_ids" ]]; then echo "✅ 无需删除部署,已满足保留数量 $KEEP。" exit 0 fi
echo "🚮 将删除以下部署(保留最近 $KEEP 个):" echo "$delete_ids"
for id in $delete_ids; do echo "🗑️ 正在删除部署 ID: $id" curl -s -X DELETE -H "Authorization: Bearer $API_TOKEN" \ "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects/$PROJECT_NAME/deployments/$id" | jq done
echo "✅ 所有旧部署已删除完成。"
|
使用方法
此处只说 windows 环境,linux 也是同样道理
安装工具
- 安装 windows 版 git bash 和 jq。方法略过,自行安装,并配置好 windows 系统环境变量
执行代码
- 将上面的代码保存为
del-pages.sh
文件,在脚本文件同级目录点击鼠标右键,打开 git bash
终端
- 运行
bash del-pages.sh
,将默认保留最新的 3
个部署,删除其他旧部署
- 运行
bash del-pages.sh 5
,将默认保留最新的 5
个部署,删除其他旧部署,数字可自行修改
#cloudflare