如何自动清理Jenkins中已删除任务的工作区目录?
Jenkins已删除项目残留工作区的解决办法
插件方案
1. Workspace Purge Plugin
这个插件专门针对已删除任务的残留工作区设计,完全匹配你的需求:
- 支持配置定期清理任务,无需给每个项目单独设置;
- 自动对比
JENKINS_HOME/workspace/与JENKINS_HOME/jobs/目录,仅删除无对应项目的工作区; - 不会影响现有项目的工作区概览,满足你保留工作区的要求。
安装后在系统管理中找到对应配置项,设置好清理周期即可自动运行。
2. Scriptler Plugin(无新插件替代方案)
如果不想安装新插件,用Scriptler运行Groovy脚本是比bash更适配Jenkins的选择:
- 编写Groovy脚本遍历workspace目录,与现有项目列表对比后删除孤儿工作区;
- 在Jenkins中配置定时执行脚本,避免bash脚本可能出现的权限、路径适配问题。
示例脚本:
import jenkins.model.Jenkins def jenkins = Jenkins.get() def workspaceRoot = new File(jenkins.rootDir, "workspace") def activeJobNames = jenkins.items.collect { it.name } workspaceRoot.eachDir { workspaceDir -> if (!activeJobNames.contains(workspaceDir.name)) { println "清理孤儿工作区: ${workspaceDir.absolutePath}" workspaceDir.deleteDir() } }
删除项目时同步清理工作区的方案
你提到的JENKINS-22240缺陷确实仍未修复,但有现成替代方案:
- Job Delete Plugin:安装后删除项目时会提供选项,允许你同步删除工作区、构建历史等关联文件,从源头避免残留。
- 若不想装插件,也可通过Jenkins脚本钩子实现,但需要编写Groovy代码监听项目删除事件,操作复杂度高于插件。
总结
最省心的组合方案:用Workspace Purge Plugin定期清理历史残留工作区,用Job Delete Plugin在删除项目时同步清理对应工作区,无需手动删除或编写硬编码脚本。
内容的提问来源于stack exchange,提问作者Nazar
相关产品推荐
相关产品推荐

