When I run jobs in parallel, the Build Flow fails or passes as I’d expect.  
Example:

parallel (
{ build(job1) },
{ build(job2) },
{ build(job3) },
)

All of the jobs are started and if they all pass, the Build Flow passes.  If 
one fails, the Build Flow fails.

What I’d like to do is to run jobs sequentially, ignoring a failure *for that 
moment* but at the end, fail or pass the Build Flow as a whole.  Using 
“ignore(FAILURE)" doesn’t give me what I want because it will ignore a failure 
and pass the Build Flow regardless:

ignore(FAILURE) {build(job1)}
ignore(FAILURE) {build(job2)}
ignore(FAILURE) {build(job3)}

If they all fail, the Build Flow still passes because failures are ignored.  
But I really need ALL of the jobs to run no matter the outcome of the other 
jobs, and the Build Flow to pass/fail, depending on each outcome.

Therefore, I have tried something like this (which I thought I got to actually 
work at one point but I can’t get it to work again!?!  The closest I can get is 
explained further down.):

FailuresPresent = 0;
try {
  build(job1)
}catch(e) {
  FailuresPresent = FailuresPresent++;
}
try {
  build(job2)
}catch(e) {
  FailuresPresent = FailuresPresent++;
}
try {
  build(job3)
}catch(e) {
  FailuresPresent = FailuresPresent++;
}
if ( FailuresPresent>0) {
  println(“There were “+FailuresPresent+" test(s) that failed”);
  throw new Exception("FAILED!”);
}else {
  println "Tests PASSED!";
}

But the Build Flow will still stop immediately after a failed job (I don’t see 
my println at the end).  If I use an ignore(FAILURE) wrapper, then the “catch” 
is ignored and the Build Flow passes.

I am not using guard/rescue because I don’t need the FailuresPresent to 
increment every time, only when there is a failure (or do I?  Guard/Rescue is 
like try/finally, not a try/catch.)

None of my jobs are dependent on another, I just want them all grouped together 
and to run sequentially in a single Build Flow if possible.  Running them in 
parallel maxes out my resources (not Jenkins but my Selenium hub).

If I wrap the above jobs in a parallel statement, it seems to gives the 
appearance of it finishing to completion (my print statement at the end is 
seen) but the Build Flow doesn’t run the other jobs.

This is the output with the entire try/catch/builds wrapped in a parallel 
statement (notice job2 and job3 aren’t run but my println at the end is seen:

parallel {
    Schedule job job1
    Build job1 #34 started
    job1 #34 completed  : UNSTABLE
}
There were 0 test(s) that failed
Tests PASSED!

Suggestions?  I hope I’m over-thinking this.

Thanks.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to