批量删除 CF pages 部署

批量删除 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="" # 需要 Pages 和 Workers 的编辑权限
ACCOUNT_ID="" # 你的 Cloudflare 账户 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

# 存储所有部署 ID 的数组
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 个部署。"

# 排序并获取要保留的最新 N 个
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