How to check return status of parallel branches in jenkins pipeline

5,281

Solution 1

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?".

Solution 2

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
}
Share:
5,281

Related videos on Youtube

Anirudh Singh
Author by

Anirudh Singh

Updated on September 18, 2022

Comments

  • Anirudh Singh
    Anirudh Singh over 1 year

    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?

  • Vano
    Vano about 5 years
    IMHO the mentioned plugin designed fir chaining jobs not for parallel pipeline steps
  • Vano
    Vano about 5 years
    using this as well. hope will find a cleaner way, too.