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

如何在Jenkins流水线Options块中用条件语句配置超时

Jenkins声明式流水线条件超时配置实现方案

声明式流水线的options块不支持直接编写if条件逻辑,可通过以下两种方案实现按变量控制超时规则的需求:

方案1:动态赋值给timeout参数(推荐,配置最简洁)

timeout配置支持传入动态计算的参数值,当条件不满足时,将超时时间设置为远大于任务正常运行时长的阈值,即可等效于不触发该6小时超时规则。
如果timerCause是流水线启动时即可确定的变量(如构建参数、启动时即可判断的触发原因等),优先用该方案:

pipeline {
    agent any
    options {
        // timerCause为true时超时为6小时,否则设置为7天超时,常规场景下不会触发
        timeout(time: timerCause ? 6 : 7*24, unit: 'HOURS')
    }
    stages {
        stage('任务执行') {
            steps {
                echo "当前timerCause值: ${timerCause}"
                // 其余业务逻辑
            }
        }
    }
}

如果timerCause的逻辑本身是判断任务是否为定时触发,可以直接在options块内判断触发原因,无需提前定义变量:

pipeline {
    agent any
    options {
        timeout(time: currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() > 0 ? 6 : 7*24, unit: 'HOURS')
    }
    // 其余流水线逻辑
}

方案2:脚本式timeout包裹业务逻辑

如果timerCause是流水线运行到执行阶段才能计算得到的变量(比如需要执行某个步骤后才能拿到判断值),或者不想设置超长默认超时,可以在script块内用脚本式语法的timeout步骤按需包裹核心逻辑,效果和options层面的全局超时一致:

pipeline {
    agent any
    stages {
        stage('核心任务') {
            steps {
                script {
                    // 定义核心业务逻辑闭包
                    def runTask = {
                        echo "开始执行业务步骤"
                        // 所有业务步骤写在这里,也可以调用其他封装好的逻辑
                    }
                    // 按条件判断是否加超时限制
                    if (timerCause) {
                        timeout(time: 6, unit: 'HOURS', runTask)
                    } else {
                        runTask.call()
                    }
                }
            }
        }
    }
}

注意:options块的逻辑在流水线启动初始化阶段就会执行,比所有stage的执行时机都早,如果判断条件依赖阶段执行的输出结果,不要使用方案1,会出现变量找不到的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:33:20