如何批量删除Jenkins中6个月未运行的闲置任务(含工作区)?
批量删除Jenkins近6个月未运行任务并清理工作区的解决方案
当然可以实现,下面是两种实用的解决方法:
方法一:通过Groovy脚本控制台直接执行
Jenkins支持通过内置的脚本控制台运行Groovy脚本批量操作任务,这是最灵活的方式:
- 登录Jenkins后台,进入「Manage Jenkins」→「Script Console」
- 粘贴以下脚本并执行:
import jenkins.model.Jenkins import java.util.Calendar // 计算6个月前的时间戳 def sixMonthsAgo = Calendar.getInstance() sixMonthsAgo.add(Calendar.MONTH, -6) def cutoffTime = sixMonthsAgo.getTimeInMillis() // 获取所有Jenkins任务 def jenkins = Jenkins.getInstance() def jobs = jenkins.getAllItems() jobs.each { job -> // 判断任务是否满足删除条件:从未运行 或 最后运行时间早于6个月前 def lastBuild = job.getLastBuild() def shouldDelete = false if (lastBuild == null) { shouldDelete = true } else { def lastRunTime = lastBuild.getTimeInMillis() if (lastRunTime < cutoffTime) { shouldDelete = true } } if (shouldDelete) { println "准备删除任务: ${job.fullName}" // 删除任务工作区 def workspace = job.getWorkspace() if (workspace != null && workspace.exists()) { workspace.deleteRecursively() println "已清理任务 ${job.fullName} 的工作区" } // 删除任务本身 job.delete() println "已删除任务: ${job.fullName}" } } println "批量清理完成"
- 脚本说明:
- 自动计算当前时间往前推6个月的时间节点
- 遍历所有任务,判断是否从未运行,或最后一次运行早于节点时间
- 先清理对应工作区,再删除任务
- 控制台会输出每个操作的日志,方便核对
方法二:使用Job Cleanup插件
如果不想写脚本,可以借助官方插件实现可视化配置:
- 安装「Job Cleanup Plugin」(在「Manage Jenkins」→「Plugins」→「Available plugins」中搜索安装)
- 安装完成后,进入「Manage Jenkins」→「Configure System」,找到「Job Cleanup」配置项
- 添加一条清理规则:
- 设置规则名称,比如「清理6个月未运行的测试任务」
- 在「Job selection」中选择需要清理的任务范围(可按团队、任务名称前缀过滤)
- 在「Retention criteria」中选择「Job has not been built for」,设置为「6」个月
- 勾选「Delete workspace when job is deleted」选项
- 可设置定时执行(比如每月1号执行一次)
- 保存配置后,插件会按规则自动执行清理操作
注意事项
- 备份优先:执行批量删除前,务必备份Jenkins的
JENKINS_HOME目录,避免误删重要任务 - 测试验证:可以先修改脚本中的时间范围(比如改成1天),或者在插件中设置测试规则,验证逻辑正确后再正式执行
- 团队通知:执行清理前最好通知各团队,确认无需要保留的闲置任务
- 权限要求:执行操作的账号需要拥有Jenkins的管理员权限
内容的提问来源于stack exchange,提问作者Rohan Kankapurkar
相关产品推荐
相关产品推荐

