如何在Jenkins中基于构建完成状态清理旧构建记录
Jenkins Declarative Pipeline 按构建状态清理旧构建方案
方案1:保留所有SUCCESS/FAILED构建,仅留存最新1条UNSTABLE构建
直接在你的声明式Pipeline中添加post执行块,调用Jenkins内置API完成过滤清理,无需额外安装插件:
pipeline { agent any // 你原有任务的配置、stages逻辑写在这里 triggers { pollSCM('H/10 * * * *') // 你原有10分钟轮询的配置保持即可 } post { always { script { import hudson.model.Result def unstableBuilds = [] // 遍历所有历史构建收集UNSTABLE状态的构建 Jenkins.instance.getItemByFullName(env.JOB_NAME).builds.each { build -> if (build.result == Result.UNSTABLE) { unstableBuilds << build } } // 仅保留最新的1条UNSTABLE构建,其余全部删除 if (unstableBuilds.size() > 1) { unstableBuilds.sort { -it.number } // 按构建号倒序排列,最新的排在最前 for (int i = 1; i < unstableBuilds.size(); i++) { unstableBuilds[i].delete() } } } } } }
逻辑说明:每次构建完成后都会遍历当前任务的所有历史构建,筛选出状态为UNSTABLE的条目,按构建号倒序后,从第2条旧的UNSTABLE构建开始逐一删除,同时会自动清理对应构建的制品、日志等相关文件。
方案2:直接删除所有UNSTABLE构建
如果不需要保留任何UNSTABLE构建,把上面script块里的逻辑替换为以下内容即可:
script { import hudson.model.Result Jenkins.instance.getItemByFullName(env.JOB_NAME).builds.each { build -> if (build.result == Result.UNSTABLE) { build.delete() } } }
注意事项
- 运行前需要确保Jenkins的任务配置中,开启了脚本访问内置API的相关权限,避免执行报错
- 如果任务历史构建数量特别多,可以在遍历的时候增加判断只处理最近30天的构建,降低性能消耗
内容的提问来源于stack exchange,提问作者kiryakov
相关产品推荐
相关产品推荐

