我已经设置了一个奴隶。对于执行 shell 脚本的作业,我配置为在从属服务器和主服务器上运行。如果我启动同一个作业的 2 个实例,我观察到该作业仅由 master 运行,第二个实例等待第一个实例完成,它也将由 master 运行。
我希望主人和奴隶同时工作。
为什么奴隶总是闲着?
有没有办法优先考虑一个奴隶?
更新:在我的用例中,一项作业使用数据库进行破坏性测试,因此在一个节点中拥有多个相同作业的实例对可靠性不利。每个节点都有一个数据库副本。
我已经设置了一个奴隶。对于执行 shell 脚本的作业,我配置为在从属服务器和主服务器上运行。如果我启动同一个作业的 2 个实例,我观察到该作业仅由 master 运行,第二个实例等待第一个实例完成,它也将由 master 运行。
我希望主人和奴隶同时工作。
为什么奴隶总是闲着?
有没有办法优先考虑一个奴隶?
更新:在我的用例中,一项作业使用数据库进行破坏性测试,因此在一个节点中拥有多个相同作业的实例对可靠性不利。每个节点都有一个数据库副本。
首先,进入作业配置页面,勾选“Execute concurrent builds if necessary”。这将允许您的作业的多个实例同时执行。
接下来,转到构建节点的配置页面(通过主页上的“构建执行器状态”链接)并将每个执行器的“# of executors”设置为 1(主节点和从节点)。这将防止一个构建节点同时运行多个作业。
结果应该是,如果您启动同一作业的 2 个实例,一个将在主服务器上执行,一个将在从服务器上执行。
使用詹金斯管道脚本的解决方案:
node("master") {
parallel (
"masterbuild" : {
node ("master") {
mybuild()
}
},
"slavebuild" : {
node ("slave") {
mybuild()
}
}
)
}
def mybuild() {
sh 'echo build on `hostname`'
}
这是对Wim
答案的改进:
转到作业配置页面并选中“如有必要,执行并发构建”。这将允许您的作业的多个实例同时执行。
接下来,使用Throttle Concurrent Builds Plug-in。
这样每个节点只允许执行一次,不同节点之间的负载均衡。
这样,一个节点就不会失去同时运行多个不相关作业的能力。