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

如何为每日和每周构建的同一Jenkinsfile设置不同全局超时?

解决方案

可以通过动态设置全局超时时间来实现需求,利用BUILD_TAGS区分构建类型,在声明式流水线的environment块中定义超时变量,再传递给options里的timeout配置,完全符合你要求的“超时计数器在代理分配后启动”的特性,且无需设置阶段超时。

示例Jenkinsfile

pipeline {
    agent any
    environment {
        // 根据BUILD_TAGS判断:含'weekly'标签则用48小时,否则用4小时(夜间构建)
        BUILD_TIMEOUT = "${BUILD_TAGS.contains('weekly') ? 48 : 4}"
    }
    options {
        // 超时从代理分配完成后开始计时
        timeout(time: BUILD_TIMEOUT.toInteger(), unit: 'HOURS')
    }
    stages {
        stage('Build') {
            steps {
                echo "当前构建类型:${BUILD_TAGS.contains('weekly') ? '每周构建' : '夜间构建'}"
                echo '执行构建步骤...'
            }
        }
        stage('Test') {
            steps {
                echo '执行测试步骤...'
            }
        }
    }
}

关键说明

  • 标签判断逻辑:根据你的BUILD_TAGS实际内容调整判断条件,比如如果夜间构建的标签是nightly,可以改成BUILD_TAGS.contains('nightly') ? 4 : 48,确保匹配触发构建时设置的标签。
  • 类型转换:BUILD_TIMEOUT是字符串类型,必须用toInteger()转成整数,否则timeout步骤会报错。
  • 默认值兜底:如果存在未标记的构建场景,上述代码默认使用4小时超时,你可以根据需求调整默认值。
  • 验证标签:可以先在流水线中添加echo "${BUILD_TAGS}"步骤,确认触发构建时标签是否正确传递到流水线中。

额外注意事项

  • 确保触发构建时正确设置标签:比如在Jenkins的定时触发配置中,给夜间构建添加nightly标签,每周构建添加weekly标签。
  • 声明式流水线的options中的timeout确实是在代理分配完成后才开始计时,不会包含等待节点的时间,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:38:16