如何清理Jenkins中已删除Bitbucket分支的旧结果文件?
Jenkins旧分支状态文件清理方案(手动+自动)
一、手动清理步骤
- 登录到对应的Jenkins节点服务器(主节点或代理节点,看状态文件存在哪里)
- 进入临时文件目录:
cd /tmp - 先列出所有状态文件,确认旧分支对应的文件名:
ls -la *__status - 针对性删除旧分支文件:比如旧分支叫
old-pay-feature,直接执行rm -f *old-pay-feature*__status - 要是旧分支太多,可先把已删除的分支名整理到
stale-branches.txt(每行一个分支名),循环批量删除:while read branch; do rm -f *${branch}*__status done < stale-branches.txt - 也可以按文件过期时间清理,比如删除7天前的所有状态文件:
find /tmp -name "*__status" -mtime +7 -delete
二、自动清理方案
1. 在每日检查任务里加前置清理逻辑
直接修改现有解析脚本,开头加上清理步骤,两种思路:
- 精准匹配已删分支:先拉取Bitbucket当前有效分支列表,对比后删除无效文件(需Bitbucket个人令牌,节点要装
curl和jq)# 替换成你的Bitbucket仓库信息和令牌 VALID_BRANCHES=$(curl -s -u 你的用户名:应用密码 https://api.bitbucket.org/2.0/repos/团队名/仓库名/refs/branches | jq -r '.values[].name') # 遍历状态文件,删除不在有效分支列表里的文件 for file in /tmp/*__status; do # 假设文件名格式是 ${NODE_NAME}__${分支名}__status,提取分支名 BRANCH=$(echo "$file" | awk -F'__' '{print $2}') if ! echo "$VALID_BRANCHES" | grep -q "^$BRANCH$"; then rm -f "$file" echo "清理旧分支状态文件:$BRANCH" fi done - 按时间自动清理:适合分支迭代快、旧文件无保留价值的场景,脚本开头加:
# 删除7天前的状态文件,天数可按需调整 find /tmp -name "*__status" -mtime +7 -delete
2. 单独建Jenkins定时清理任务
新建一个Freestyle或Pipeline任务,设置在每日检查任务之前运行(比如用Cron表达式0 7 * * *,每天早上7点执行),任务内容就是上面的清理脚本,完全不影响现有检查任务。
3. 从根源优化状态文件生成
最彻底的办法是改流水线逻辑:
- 每次生成
__status文件前,先检查分支在Bitbucket是否存在,不存在就跳过生成/更新 - 或者每次生成新文件时,先删除对应分支的旧文件,再写入新结果
内容的提问来源于stack exchange,提问作者Nemelis
相关产品推荐
相关产品推荐

