shelljenkinsnodesparallel-execution

How to hold Jenkins multiJob execution until chosen nodes are free?


I have a question about jenkins multijob possibilities:


current state:


Desired state:


this wouldn’t be problem, if all nodes were free...but if at least one of those three node is running some other job, it’s a problem already, because one subJob will be late compared to the other two

Is there any way to set up some pre-build script/another way to run subJobs only if all three chosen nodes are free/to wait for them to be free?

Thanks a lot for all ideas :)


Solution

  • You can check the status of the build executor on particular node as a pre-build action. If the build executor is idle, that means no job is running but if it's busy, something is running into it. Simple groovy script can be used for this purpose.

    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...
        }
    }
    

    }

    Thanks, Subhadeep