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

如何禁止Jenkins Slave在自有流水线任务运行时执行主节点下发任务?

Jenkins Slave节点任务冲突解决方案

以下是几种可行的解决方法,根据你的场景选择适配方案:

方法一:使用Lockable Resources插件实现资源互斥

  • 安装Lockable Resources插件,进入系统管理 → 系统配置,找到Lockable Resources配置项,添加一个专属资源(例如命名为slave-shared-resource),并关联到目标Slave节点
  • 在流水线A中,用lock步骤锁定该资源,确保任务执行期间独占共享资源:
pipeline {
    agent { label '你的Slave节点标签' }
    stages {
        stage('执行任务A') {
            steps {
                lock(resource: 'slave-shared-resource') {
                    // 任务A的具体执行逻辑
                }
            }
        }
    }
}
  • 对任务B做同样配置:如果是自由风格任务,在构建环境中勾选「Lock a resource」并选择上述资源;如果是流水线任务,同样添加lock步骤锁定该资源
  • 效果:任务A运行时,任务B会进入等待队列,直到任务A释放资源后才会启动

方法二:通过节点标签+任务并发限制实现互斥

  • 给目标Slave设置唯一专属标签(例如exclusive-slave-01),确保只有需要运行的任务能调度到该节点
  • 流水线A配置:添加options { disableConcurrentBuilds() }禁止自身并发,同时指定agent为该专属标签
  • 任务B配置:在高级项目选项中设置「限制项目的运行节点」为该专属标签,同时勾选「不要同时运行多个构建」
  • 保持Slave执行器数量为1,这样同一时间节点上只能有一个任务运行,彻底避免并行冲突

方法三:让流水线A独占节点执行

  • 如果流水线A需要全程占用Slave节点,可在流水线中使用node块并设置exclusive参数(需Jenkins版本支持):
node('你的Slave节点标签', exclusive: true) {
    // 流水线A的全部执行逻辑
}
  • 效果:流水线A运行期间,该节点的执行器会被完全占用,主节点无法向其调度任何任务,直到流水线A执行完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:10:17