5

I am running a Jenkins job on multiple slaves. Following is the code structure:

def branches = [:]
def allNodes = Jenkins.getInstance().getNodes()
for (int i =0; i < allNodes.size(); i++) {
branches[allNodes[i].name.toString()] = {
    node(allNodes[i].name.toString()) { 
    .
    .
    stuff
    }
}
parallel branches

Now, I want to get the status of the job parts running on nodes so that in case some job part fails on some node I can mark that node as offline. Is there any way to do this?

2 Answers 2

4

I tried storing the slave job part status in a file and stashing it on node and then unstashing it back on master. It works but I am looking for a cleaner way. Following is the current approach i am using:

def branches = [:]
def allNodes = Jenkins.getInstance().getNodes()
for (int i =0; i < allNodes.size(); i++) {
String nodeName = allNodes[i].name.toString()
branches[nodeName] = {
    node(nodeName) { 
    .
    .
    String outputFile = nodeName + "-output"
    writeFile file: outputFile, text: result.toString()
    stash includes: "*output", name: outputFile
    }
}
parallel branches

for (int i = 0; i < allNodes.size(); i++) 
{
    String filename = allNodes[i].name.toString() + "-output"
    unstash filename
    def value = readFile filename

    // Mark node offline based on the variable value
}
2
  • using this as well. hope will find a cleaner way, too.
    – Vano
    Commented Feb 25, 2019 at 11:37
  • Nothing changed in 2024 Commented Jan 5 at 8:57
3

You may want to try the Join plugin. Some more details about this plugin (from the linked page):

This plugin allows a job to be run after all the immediate downstream jobs have completed. In this way, the execution can branch out and perform many steps in parallel, and then run a final aggregation step just once after all the parallel work is finished.

The plugin is useful for creating a 'diamond' shape project dependency. This means there is a single parent job that starts several downstream jobs. Once those jobs are finished, a single aggregation job runs.

For more details on that, refer to my self answered question about "Why trigger something remotely (using Jenkins) and then just forget about it?".

1
  • IMHO the mentioned plugin designed fir chaining jobs not for parallel pipeline steps
    – Vano
    Commented Feb 25, 2019 at 11:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.