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

Jenkins作业卡在队列中,worker节点离线时如何让其自动失败

可行方案整理

方案1:使用专用插件(最简方案)

直接安装Queue Wait Timeout Jenkins插件即可,该插件的超时计时从作业进入调度队列时就开始,完全适配你的需求:

  • 插件安装完成后进入目标作业配置页,找到「队列等待超时」配置模块
  • 设置超时阈值为你需要的时长(比如5分钟)
  • 超时动作选择「中止排队、标记构建为失败」,再搭配你常用的通知规则(邮件、企业微信/钉钉插件等)即可实现超时自动告警

方案2:无插件Groovy脚本实现

如果你不想额外安装插件,可以配置定时执行的系统Groovy脚本来实现监控逻辑,示例脚本如下:

import jenkins.model.Jenkins
import hudson.model.Node
import hudson.model.Queue

def targetNodeName = "slave02"
def maxWaitTime = 5 * 60 * 1000 // 5分钟,单位毫秒

// 检查目标节点状态
Node targetNode = Jenkins.instance.getNode(targetNodeName)
boolean nodeOffline = targetNode == null || targetNode.toComputer().isOffline()

if (nodeOffline) {
    // 遍历队列中所有绑定到目标节点的作业
    Queue.Item[] items = Jenkins.instance.queue.getItems()
    items.each { item ->
        if (item.assignedLabel?.name == targetNodeName) {
            long waitTime = System.currentTimeMillis() - item.getInQueueSince()
            if (waitTime > maxWaitTime) {
                // 取消排队,标记失败并触发通知
                Jenkins.instance.queue.cancel(item.task)
                item.task.getBuilds().forEach { build ->
                    if (build.isBuilding()) {
                        build.setResult(hudson.model.Result.FAILURE)
                        build.doStop()
                    }
                }
                // 这里可以补充你的通知逻辑,比如调用邮件/消息接口
            }
        }
    }
}

你可以将该脚本配置为定时执行的系统任务(比如每1分钟执行一次),即可自动处理排队超时的作业。

方案3:Pipeline作业前置校验

如果你用的是Pipeline类型的作业,可以调整结构先做节点状态校验,再执行实际任务:

pipeline {
    agent any // 先在任意可用节点执行校验
    stages {
        stage('节点状态校验') {
            steps {
                script {
                    def targetNode = Jenkins.instance.getNode('slave02')
                    if (targetNode == null || targetNode.toComputer().isOffline()) {
                        error("目标节点slave02已离线,构建终止")
                    }
                }
            }
        }
        stage('实际构建任务') {
            agent {
                label 'slave02' // 校验通过后才分配到目标节点执行
            }
            steps {
                // 你的原有构建逻辑
            }
        }
    }
    post {
        failure {
            // 你的通知逻辑
        }
    }
}

该方案无需额外配置,作业触发后会立刻校验节点状态,离线直接终止并发送通知,不会卡在队列中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:02