如何终止等待不存在节点的Jenkins任务?已配置Build Timeout插件无效
解决Jenkins任务等待不存在节点无限等待的方法
方法1:使用Queue Cleanup Plugin
这个插件专门用于管理Jenkins构建队列,支持按标签、任务名等条件筛选队列中的任务,可设置超时自动取消或手动清理。安装后:
- 进入Jenkins全局配置,找到插件设置项
- 添加规则:选择「Label」条件,填入目标标签
xxxx,设置超时时间(比如10分钟),触发动作选择「Cancel the build」 - 保存后,符合条件的等待任务会在超时后自动被取消
方法2:Groovy脚本手动/定时清理
在Jenkins「脚本控制台」(路径:Manage Jenkins > Script Console)执行以下脚本,可批量取消等待指定标签的任务:
def labelName = 'xxxx' def queue = Jenkins.instance.queue queue.items.each { item -> if (item.task instanceof hudson.model.AbstractProject) { def assignedLabel = item.task.assignedLabel if (assignedLabel != null && assignedLabel.name == labelName) { println "Cancelling build: ${item.task.name}" queue.cancel(item) } } } println "Done"
如果需要定期执行,可创建自由风格任务,配置定时触发并执行该脚本。
方法3:修改任务配置,提前拦截无效请求
对于涉及该标签的任务,修改配置:
- 在「Restrict where this project can be run」选项中填写标签
xxxx,点击「Advanced...」 - 在「Run condition」中选择「Groovy script」(需安装Script Security Plugin),输入脚本判断标签是否有可用节点:
def label = Jenkins.instance.getLabel('xxxx') return label != null && label.getNodes().size() > 0
- 设置「If condition fails」为「Do not run」,这样当标签无可用节点时,任务不会进入队列等待,直接标记为失败
方法4:全局队列超时配置
安装Queue Management Plugin后,在Jenkins全局配置的「Queue Configuration」中设置全局队列超时时间,所有超过该时间仍未分配到节点的任务都会被自动取消,适合统一管理所有队列任务的场景
内容的提问来源于stack exchange,提问作者pa1
相关产品推荐
相关产品推荐

