Jenkins:如何为特定下游触发器预留验收测试构建资源?
解决方案说明
原生的Jenkins Throttle Concurrent Builds插件无法直接实现为特定触发源(job1)硬预留构建名额的需求,但可以通过以下几种替代方案达成类似效果:
方案一:拆分验收测试(AT)作业(推荐)
将原AT作业拆分为两个独立作业:
- 专属job1的AT作业:配置限流参数如下,保证job1触发的构建随时有1个专属名额:
throttleJobProperty( maxConcurrentPerNode: 0, maxConcurrentTotal: 1, paramsToUseForLimit: '', throttleEnabled: true, throttleOption: 'project' ) - 通用AT作业:配置限流参数使用剩余的4个名额,供job2/job3等其他作业触发:
throttleJobProperty( maxConcurrentPerNode: 0, maxConcurrentTotal: 4, paramsToUseForLimit: '', throttleEnabled: true, throttleOption: 'project' )
之后调整触发器配置:让job1只触发专属AT作业,其他作业触发通用AT作业。这种方案逻辑清晰,易于维护,能完全保证job1的构建无需排队(只要专属作业的名额空闲)。
方案二:结合优先级插件实现优先调度
如果不想拆分作业,可以安装Priority Sorter Plugin,通过优先级调度间接实现job1触发构建的优先执行:
- 保留原AT作业的限流配置(maxConcurrentTotal:5)
- 给AT作业添加优先级排序规则:识别由job1触发的构建(可通过构建参数、触发源标识判断),将其优先级设为最高级别
- 当队列中存在job1触发的AT构建时,Jenkins会优先为其分配空闲的并发名额,确保它能优先于其他排队的构建启动
这种方案无法硬预留名额(当5个名额全被其他构建占用时,job1的构建仍需等待),但能最大程度保证job1的构建无需长时间排队。
方案三:动态调整并发数(不推荐)
通过Jenkins脚本或自定义逻辑,在job1触发AT构建时临时调整限流参数:
- 当检测到job1触发的AT进入队列,调用Jenkins API将AT作业的
maxConcurrentTotal临时改为6 - 待job1的AT构建启动后,再将参数改回5
这种方案实现复杂,容易出现并发冲突或参数异常,仅在无法拆分作业且必须硬预留名额的极端场景下考虑。
内容的提问来源于stack exchange,提问作者Frendom
相关产品推荐
相关产品推荐

