如何在主从之间分配负载

How to split load between master and slave

我设置了一个slave。 对于执行 shell 脚本的作业,我在从站和主站上配置为 运行。 如果我启动同一个作业的 2 个实例,我观察到该作业仅由 master 运行,第二个实例等待第一个完成,它也将 运行 由 master大师.

希望master和slave同时工作

为什么slave总是空闲?

有没有办法优先考虑一个奴隶?

UPDATE:在我的用例中,作业使用数据库进行破坏性测试,因此在一个节点中拥有多个相同作业的实例不利于可靠性.每个节点都有一份数据库。

首先,转到作业配置页面并检查 "Execute concurrent builds if necessary"。这将允许您的作业的多个实例同时执行。

接下来,转到构建节点的配置页面(通过主页上的 link "Build Executor Status")并将每个节点的“# of executors”设置为 1(master 和奴隶) 。这将防止一个构建节点同时 运行 多个作业。

结果应该是,如果您启动同一个作业的 2 个实例,一个将在 master 上执行,一个将在 slave 上执行。

使用 jenkins 管道脚本的解决方案:

node("master") {
    parallel (
        "masterbuild" : { 
            node ("master") {
                mybuild()
            }
        },
        "slavebuild" : { 
            node ("slave") {
                mybuild() 
            }
        }
    )
}
def mybuild() {
    sh 'echo build on `hostname`'
}

这是对 Wim 答案的改进:

转到作业配置页面并检查 "Execute concurrent builds if necessary"。这将允许您的作业的多个实例同时执行。

接下来,使用 Throttle Concurrent Builds Plug-in.

这样每个节点只允许执行一次,不同节点之间负载均衡

通过这种方式,节点不会失去同时 运行 多个不相关作业的能力。