You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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}条构建记录"

关键部分解释

  1. 时间阈值计算:
    使用Calendar类计算3个月前的毫秒级时间戳,和构建的getTimeInMillis()结果对比,快速判断分支是否属于陈旧范畴。

  2. 分支构建判断:

    • 先检查分支是否存在构建记录,无构建的分支直接跳过
    • 对比最后一次构建的时间戳与阈值,超过则执行清理操作
  3. 清理操作:

    • branchJob.getBuilds().each { it.delete() }:仅删除该分支的所有构建历史,保留分支本身
    • 如果需要直接删除分支,取消branchJob.delete()的注释即可
  4. 安全与权限:

    • 使用Jenkins.getInstanceOrNull()替代Jenkins.instance,避免空指针异常
    • 执行脚本需要Jenkins管理员权限,确保你拥有足够权限运行系统Groovy脚本

配置Cron自动执行

  1. 在Jenkins中创建一个自由风格软件项目
  2. 在构建步骤中选择执行系统Groovy脚本,将上述脚本粘贴到脚本框中
  3. 进入项目「配置」页面,找到「构建触发器」模块,勾选「定期构建」
  4. 设置Cron表达式,例如:
    • 0 0 1 * *:每月1号凌晨执行一次
    • 0 0 * * 0:每周日凌晨执行一次
  5. 保存配置,Jenkins会按照设定时间自动执行清理脚本

内容的提问来源于stack exchange,提问作者PercySherlock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:35