如何保持Jenkins multiJob执行,直到选定的节点空闲为止?

问题描述

我对詹金斯(Jenkins)多种工作的可能性有疑问:


当前状态:

  • 我有8个Jenkins节点用于执行作业,有2个Linux和6个Windows。
  • 我设置了Multijob,由3个子职位组成。
  • MultiJob设置:仅在Linux节点上运行具有限制
  • SubJob设置:n1只能在Win节点1上运行,n2只能在Win节点2上运行,n3只能在Win节点3上运行


期望的状态:

  • 构建multiJob时,我需要它检查并等待Win节点1,2,3空闲
  • 我需要同时执行1,3个子任务


这不是问题,如果所有节点都空闲...但是,如果这三个节点中的至少一个正在运行其他作业,这已经是一个问题,因为与之相比,一个subJob会比较晚另外两个

只有在所有三个选定节点都空闲/等待它们空闲时,有没有办法设置一些预构建脚本/另一种方式来运行subJobs?

非常感谢所有想法:)

解决方法

您可以在特定节点上检查构建执行程序的状态,作为构建前的操作。 如果构建执行器处于空闲状态,则意味着没有作业在运行,但是如果繁忙,则说明正在运行某些内容。 简单的常规脚本可以用于此目的。

import hudson.model.Node
import hudson.model.Slave
import jenkins.model.Jenkins

Jenkins jenkins = Jenkins.instance
def jenkinsNodes =jenkins.nodes

for (Node node in jenkinsNodes) 
{
// Make sure slave is online
if (!node.getComputer().isOffline()) 
{           
    //Make sure that the slave busy executor number is 0.
    if(node.getComputer().countBusy()==0)
        {
       ...put your logic...
    }
}

}

谢谢, 超自然