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

如何查找Jenkin主从节点中运行超5小时的任务并终止

Jenkins超时运行任务查询与终止方案

直接执行脚本处理(临时一次性清理)

直接在Jenkins主节点的「管理Jenkins」-「脚本控制台」运行如下Groovy脚本即可,自动覆盖主节点和所有客户端(Agent)节点上的运行任务:

import jenkins.model.Jenkins

// 超时阈值:5小时,单位为毫秒
def timeoutMs = 5 * 60 * 60 * 1000
def currentTime = System.currentTimeMillis()

Jenkins.get().getAllItems(hudson.model.Job.class).each { job ->
    job.getBuilds().each { build ->
        if (build.isBuilding()) {
            def duration = currentTime - build.getStartTimeInMillis()
            if (duration > timeoutMs) {
                println "待终止任务:${job.fullName} 构建编号${build.number},已运行${String.format("%.1f", duration/3600000)}小时"
                // 安全终止构建,同步停止Agent端的对应进程
                build.doStop()
            }
        }
    }
}
println "超时任务处理完成"

注意:运行脚本的账号需持有Jenkins管理员权限和任务终止权限。

配置长期自动超时规则

如果需要避免后续再出现长时间运行的冗余任务,可以直接在任务配置中加超时规则,无需每次手动执行脚本:

  • 自由风格任务:进入任务配置页,找到「构建环境」板块,勾选「如果构建花费时间太长,则中止构建」,设置超时时间为5小时即可
  • 流水线任务:直接在Jenkinsfile中添加全局超时配置,示例如下:
pipeline {
    agent any
    options {
        timeout(time: 5, unit: 'HOURS')
    }
    stages {
        stage('业务构建') {
            steps {
                // 此处填写原流水线业务逻辑
            }
        }
    }
}

原方案失效原因说明

你之前调用Thread.getAllStackTraces()无法达到预期效果,是因为Jenkins的Agent节点任务运行在独立于主节点的进程中,不归主节点JVM的线程池管理;就算是主节点本地的构建任务,也大多运行在独立的工作进程中,直接枚举JVM线程既无法匹配到对应构建任务,也可能误操作核心线程引发主服务崩溃,不推荐使用该方式处理构建任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:54:04