如何清理Jenkins控制节点中的工作空间?
清理Jenkins控制器工作空间的优化方案
你的核心问题在于:定时删除旧工作空间后,多分支流水线扫描会重新拉取已删除的PR/分支工作空间,导致控制器磁盘被占满。这是因为多分支扫描时会校验分支工作空间的存在性,不存在则自动拉取。以下是针对性的解决方法:
1. 优化多分支流水线的分支保留策略
直接从根源减少不必要的工作空间生成:
- 在多分支流水线的配置页面,找到Discard old items选项,设置:
- 保留的分支/PR数量上限(比如仅保留最近10个活跃PR)
- 保留时长(比如超过7天的废弃分支自动清理)
这样被标记为废弃的分支/PR会被Jenkins自动移除,扫描时不会再重新拉取它们的工作空间。
- 在Branch Sources的源码管理配置中,启用工作空间保留规则,比如设置“仅保留当前活跃分支的工作空间”,或者空闲超时(如3天无活动)自动清理工作空间。
2. 改进定时清理脚本,只删除废弃分支的工作空间
不要盲目删除所有旧目录,而是只清理那些已经被Jenkins标记为废弃的分支对应的工作空间:
# 替换为你的多分支流水线名称 MULTIBRANCH_JOB="your-multibranch-job" # 获取当前Jenkins中仍存在的分支列表 ACTIVE_BRANCHES=$(ls /var/lib/jenkins/jobs/$MULTIBRANCH_JOB/branches/ | sed 's/\/$//') # 遍历工作空间目录,删除不在活跃分支列表且超过2天的目录 find /var/lib/jenkins/workspace/$MULTIBRANCH_JOB-* -maxdepth 0 -type d -mtime +2 | while read WORKSPACE_DIR; do # 从工作空间目录名中提取分支名称 BRANCH_NAME=$(basename "$WORKSPACE_DIR" | sed "s/^$MULTIBRANCH_JOB-//") # 检查分支是否仍活跃,非活跃则删除 if ! echo "$ACTIVE_BRANCHES" | grep -q "^$BRANCH_NAME$"; then sudo rm -rf "$WORKSPACE_DIR" fi done
注意:默认工作空间命名格式为
[多分支job名]-[分支名],如果你的Jenkins工作空间命名规则不同,需要调整脚本中的分支名称提取逻辑。
3. 利用Workspace Cleanup插件清理控制器工作空间
其实Workspace Cleanup插件支持清理控制器(master节点)的工作空间,只要你的任务是在master节点上运行的。可以在流水线中添加清理步骤,在任务结束后自动清理当前工作空间:
pipeline { agent { label 'master' } // 指定任务在控制器节点运行 stages { stage('Build') { steps { // 你的构建/执行步骤 } } } post { always { cleanWs() // 无论任务成功失败,都清理当前工作空间 } } }
内容的提问来源于stack exchange,提问作者Justas
相关产品推荐
相关产品推荐

