Currently my pipeline fails (red), when a maven-job is unstable (yellow).
node {
stage 'Unit/SQL-Tests'
parallel (
phase1: { build 'Unit-Tests' }, // maven
phase2: { build 'SQL-Tests' } // shell
)
stage 'Integration-Tests'
build 'Integration-Tests' // maven
}
In this example the job Unit-Test's result is unstable, but is shown as failed in the pipeline.
How can I change the jobs/pipeline/jenkins to have the (1) the pipeline step unstable instead of failed and (2) the pipeline's status unstable instead of failed.
I tried adding the MAVEN_OPTS
parameter -Dmaven.test.failure.ignore=true
, but that did not solve the issue. I am unsure how to wrap the build 'Unit-Test'
into some logic that can catch and process the result.
Adding a sub-pipeline with this logic doesn't do the trick, as there is no option to checkout from subversion (that option is available in a regular maven job). I would not like to use commandline checkout if possible.
Lessons learned:
currentBuild.result
value which can be either SUCCESS
, UNSTABLE
or FAILURE
(source).build job: <JOBNAME>
can be stored in a variable. The build status is in variable.result
.build job: <JOBNAME>, propagate: false
will prevent the whole build from failing right away.currentBuild.result
can only get worse. If that value was previously FAILED
and receives a new status SUCCESS
through currentBuild.result = 'SUCCESS'
it will stay FAILED
This is what I finally used:
node {
def result // define the variable once in the beginning
stage 'Unit/SQL-Tests'
parallel (
phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE
phase2: { build 'SQL-Tests' }
)
currentBuild.result = result.result // update the build status. jenkins will update the pipeline's current status accordingly
stage 'Install SQL'
build 'InstallSQL'
stage 'Deploy/Integration-Tests'
parallel (
phase1: { build 'Deploy' },
phase2: { result = build job: 'Integration-Tests', propagate: false }
)
currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse)
stage 'Code Analysis'
build 'Analysis'
}