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

如何删除Jenkins中由特定用户触发的旧构建记录

Jenkins特定用户触发旧构建删除方案

完全支持按构建触发用户维度筛选删除旧构建,无需安装额外插件,直接在Jenkins Script Console执行Groovy脚本即可实现,核心逻辑是通过构建的触发原因类提取触发用户信息做匹配。

重要提醒:构建删除为不可逆操作,请务必先运行预览模式核对待删除记录,确认无误后再执行删除逻辑。


操作步骤

  • 进入Jenkins管理界面的Script Console页面(路径:Manage Jenkins → Script Console)
  • 运行预览脚本,匹配待删除的构建列表,核对范围:
// ========== 按需修改以下配置项 ==========
def jobFullName = "目标任务的完整名称,多层文件夹嵌套的任务需写全路径,例:prod/pay-service/deploy"
def triggerUserName = "需要筛选的触发用户名称,例:lisi"
def keepLatestCount = 5 // 保留该用户触发的最近N个构建,避免误删最新有效记录
// ======================================

def targetJob = Jenkins.instance.getItemByFullName(jobFullName)
if (!targetJob) {
    println "错误:未找到对应名称的任务,请检查jobFullName配置"
    return
}

def matchedBuilds = []
targetJob.builds.each { build ->
    // 跳过正在运行中的构建
    if (build.building) {
        return
    }
    // 提取用户触发的构建原因
    def userTriggerCause = build.getCause(hudson.model.Cause.UserIdCause.class)
    if (userTriggerCause && userTriggerCause.userName == triggerUserName) {
        matchedBuilds << build
    }
}

// 按构建号从新到旧排序,跳过需要保留的最近N个构建
def waitToDelete = matchedBuilds.sort { -it.number }.drop(keepLatestCount)
println "匹配结果:用户[${triggerUserName}]共触发${matchedBuilds.size()}个构建,按规则保留最近${keepLatestCount}个,待删除${waitToDelete.size()}个,待删除构建明细:"
waitToDelete.each {
    println "构建号#${it.number} | 触发时间:${new Date(it.startTimeInMillis)}"
}
  • 核对控制台输出的待删除列表完全符合预期后,在上述预览脚本的末尾追加以下代码,执行即可完成删除:
waitToDelete.each { build ->
    print "正在删除构建#${build.number}..."
    build.delete()
    println "完成"
}
println "全部删除操作执行完毕"

补充说明

  • 如果需要批量清理所有任务下对应用户触发的旧构建,可以把单任务获取逻辑替换为遍历Jenkins所有任务的逻辑,注意递归处理文件夹(com.cloudbees.hudson.plugins.folder.Folder类型)下的子任务
  • 非用户手动触发的构建(比如定时器触发、上游任务触发、Webhook自动触发)不会携带UserIdCause标识,不会被误匹配删除
  • 执行脚本的账号需要拥有目标任务的构建删除权限,否则会抛出权限错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:33:29