如何在主站和从站之间分配负载

时间:2017-05-29 13:18:38

标签: jenkins jenkins-slave

我已经设置了一个奴隶。 对于执行shell脚本的作业,我配置为在slave和master上运行。 如果我启动了同一个作业的2个实例,我发现该作业只由主服务器运行,第二个实例等待第一个实例完成,它也将由主服务器运行。

我希望主人和奴隶同时工作。

为什么奴隶总是闲着?

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

更新:在我的用例中,作业使用数据库进行破坏性测试,因此在节点中拥有同一作业的多个实例的可靠性并不好。每个节点都有一个数据库副本。

3 个答案:

答案 0 :(得分:1)

首先,转到作业配置页面并选中“必要时执行并发构建”。这将允许您的作业的多个实例同时执行。

接下来,转到构建节点的配置页面(通过主页面上的“Build Executor Status”链接),并为每个(主要和从属)设置“执行程序的数量”为1。这将阻止一个构建节点同时运行多个作业。

结果应该是,如果你启动同一个作业的2个实例,一个将在主服务器上执行,一个将在从服务器上执行。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这是对Wim答案的改进:

转到作业配置页面并选中“必要时执行并发构建”。这将允许您的作业的多个实例同时执行。

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

这样,每个节点只允许执行一次,并且负载在不同节点之间平衡。

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