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

Jenkins重启后出现“僵尸”流水线运行实例,如何清理?

解决Jenkins 2.107.2重启后流水线显示假未完成的问题

嘿,这个问题我之前在团队里碰到过一模一样的,Jenkins 2.x版本的流水线恢复机制有时候确实会抽风,尤其是2.107.2这个版本,咱们一步步来解决:

问题根源

Jenkins重启时会自动尝试恢复之前中断的构建,但如果流水线已经在重启前完全完成,却在系统的恢复队列里残留了无效记录,就会出现这种“进度条显示未完成,但实际早就成功”的矛盾状态,日志里重复的“Resuming build”信息就是最直接的证据——系统在反复尝试恢复一个已经结束的任务。

具体解决步骤

1. 先清理卡住的恢复任务

  • 进入Jenkins后台的「Manage Jenkins」→「Manage Nodes and Clouds」,点击master节点的「Build Executor Status」,找一找有没有标记为「Resuming」的任务,直接手动终止它们。
  • 如果批量任务太多,用脚本控制台批量处理更高效:
    进入「Manage Jenkins」→「Script Console」,执行下面的Groovy脚本(记得替换成你的流水线名称,要处理所有流水线就去掉名称过滤):
    // 替换成你的流水线全名,比如"dev/backend-pipeline"
    def pipelineName = "你的流水线名称"
    def pipeline = Jenkins.instance.getItemByFullName(pipelineName)
    
    pipeline.builds.each { build ->
      if (build.isBuilding() && build.getLog().contains('Resuming build')) {
        build.doStop()
        println "已终止卡住的恢复构建 #${build.number}"
      }
    }
    
    执行后刷新页面,大部分假未完成的状态应该会消失。

2. 检查流水线配置与插件兼容性

  • 对于Declarative Pipeline,确保你的构建清理配置正确,避免旧构建元数据残留:
    在流水线的options块里添加或确认buildDiscarder配置,比如保留最近10个构建:
    options {
      buildDiscarder(logRotator(numToKeepStr: '10'))
    }
    
  • 检查核心插件版本:2.107.2对应的Pipeline: Nodes and Processes和Workflow Durable Task Step插件最好用官方推荐的兼容版本,去「Manage Jenkins」→「Manage Plugins」里查看更新,避免插件冲突导致的状态异常。

3. 手动强制修正构建状态(极端情况)

如果某个构建还是顽固显示未完成,但控制台明确显示Finished: SUCCESS,可以用脚本强制标记为完成:

// 替换成流水线名称和目标构建号
def pipelineName = "你的流水线名称"
def buildNumber = 123

def build = Jenkins.instance.getItemByFullName(pipelineName).getBuildByNumber(buildNumber)
build.setResult(hudson.model.Result.SUCCESS)
build.save()
println "已将构建 #${buildNumber} 标记为成功状态"

预防措施

  • 重启Jenkins前,尽量先暂停所有正在运行的流水线,等它们全部完成后再重启,减少系统不必要的恢复操作。
  • 定期清理旧构建,降低元数据积累带来的异常概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:54:46