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

Jenkins Pipeline定期清理构建队列脚本流水线运行失败问题咨询

Jenkins流水线定期清理构建队列解决方案

失效核心原因

你现有脚本无法在流水线运行主要有3个问题:

  • 声明式流水线默认要求执行自定义Groovy逻辑必须包裹在script块内,直接写步骤会触发语法报错
  • Jenkins流水线默认开启脚本安全沙箱,直接调用Jenkins核心API会被权限拦截
  • 原单行脚本缺少语句分隔符,在流水线Groovy解析器中会出现语法识别错误

前置配置要求

  • 首先进入Jenkins管理后台→「进程内脚本批准」页面,将被拦截的jenkins.model.Jenkins.get、hudson.model.Queue.cancel相关方法加入批准列表
  • 流水线运行账号需持有队列管理、Jenkins实例读取的对应权限
  • 如果是内网安全环境,也可以将该流水线加入受信任流水线列表,跳过沙箱校验

可直接运行的流水线脚本

以下为带定时触发配置的完整声明式流水线示例:

pipeline {
    agent any
    triggers {
        // 自定义cron表达式配置执行周期,示例为每小时执行一次
        cron('0 * * * *')
    }
    stages {
        stage('清理构建队列') {
            steps {
                script {
                    def jenkinsInstance = jenkins.model.Jenkins.get()
                    def buildQueue = jenkinsInstance.queue
                    // 遍历取消所有排队任务
                    for (def queuedItem in buildQueue.items) {
                        buildQueue.cancel(queuedItem.task)
                        println "已取消排队任务:${queuedItem.task.fullDisplayName}"
                    }
                    println "队列清理完成,当前剩余排队任务数:${buildQueue.items.size()}"
                }
            }
        }
    }
}

可选优化配置

如果不需要清理全部排队任务,可在循环内添加过滤规则,示例如下:

for (def queuedItem in buildQueue.items) {
    // 仅清理名称包含指定前缀的任务,可根据需求修改判断规则
    if (queuedItem.task.name.startsWith("测试任务-")) {
        buildQueue.cancel(queuedItem.task)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:24:02