如何通过Cron任务删除Jenkins Multibranch pipeline超3个月陈旧分支构建历史
解决方案:自动清理Jenkins多分支流水线陈旧分支构建历史
完整Groovy脚本
import jenkins.model.Jenkins import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject import org.jenkinsci.plugins.workflow.job.WorkflowJob import java.util.Calendar // 配置参数 int monthsToKeep = 3 String targetPipelineName = 'Demo' // 计算3个月前的时间戳(毫秒) Calendar cal = Calendar.getInstance() cal.add(Calendar.MONTH, -monthsToKeep) long cutoffTimestamp = cal.getTimeInMillis() // 获取目标多分支流水线 def jenkins = Jenkins.getInstanceOrNull() if (!jenkins) { println "无法获取Jenkins实例" return } def targetPipeline = jenkins.getAllItems(WorkflowMultiBranchProject).find { it.fullName == targetPipelineName } if (!targetPipeline) { println "未找到名为${targetPipelineName}的多分支流水线" return } println "开始处理多分支流水线: ${targetPipelineName}" println "清理阈值: ${monthsToKeep}个月前 (时间戳: ${cutoffTimestamp})" int cleanedBranches = 0 int cleanedBuilds = 0 // 遍历所有分支 targetPipeline.items.each { WorkflowJob branchJob -> // 获取分支最后一次构建 def lastBuild = branchJob.getLastBuild() if (!lastBuild) { println "分支${branchJob.name}无构建记录,跳过" return } long lastBuildTimestamp = lastBuild.getTimeInMillis() if (lastBuildTimestamp < cutoffTimestamp) { println "分支${branchJob.name}最后构建时间超过阈值,开始清理..." // 删除该分支所有构建记录 branchJob.getBuilds().each { build -> build.delete() cleanedBuilds++ } // 如果需要连分支本身一起删除,取消下面注释 // branchJob.delete() cleanedBranches++ println "分支${branchJob.name}清理完成" } else { println "分支${branchJob.name}最后构建时间未超过阈值,跳过" } } println "清理完成!共清理${cleanedBranches}个分支,${cleanedBuilds}条构建记录"
关键部分解释
时间阈值计算:
使用Calendar类计算3个月前的毫秒级时间戳,和构建的getTimeInMillis()结果对比,快速判断分支是否属于陈旧范畴。分支构建判断:
- 先检查分支是否存在构建记录,无构建的分支直接跳过
- 对比最后一次构建的时间戳与阈值,超过则执行清理操作
清理操作:
branchJob.getBuilds().each { it.delete() }:仅删除该分支的所有构建历史,保留分支本身- 如果需要直接删除分支,取消
branchJob.delete()的注释即可
安全与权限:
- 使用
Jenkins.getInstanceOrNull()替代Jenkins.instance,避免空指针异常 - 执行脚本需要Jenkins管理员权限,确保你拥有足够权限运行系统Groovy脚本
- 使用
配置Cron自动执行
- 在Jenkins中创建一个自由风格软件项目
- 在构建步骤中选择执行系统Groovy脚本,将上述脚本粘贴到脚本框中
- 进入项目「配置」页面,找到「构建触发器」模块,勾选「定期构建」
- 设置Cron表达式,例如:
0 0 1 * *:每月1号凌晨执行一次0 0 * * 0:每周日凌晨执行一次
- 保存配置,Jenkins会按照设定时间自动执行清理脚本
内容的提问来源于stack exchange,提问作者PercySherlock
相关产品推荐
相关产品推荐

