Jenkins Pipeline Fails if Step is Unstable
Whatever the step is UNSTABLE or FAILED, the final build result in your script will be FAILED.
You can add propagate to false by default to avoid fail the flow.
def result = build job: 'test', propagate: false
In the end of the flow, you can verdict the final result based on what you got from the "result" variable.
For example
currentBuild.result='UNSTABLE'
Here is a detail example How to set current build result in Pipeline
Lessons learned:
- Jenkins will continuously update the pipeline according to the
currentBuild.result
value which can be eitherSUCCESS
,UNSTABLE
orFAILURE
(source). - The result of
build job: <JOBNAME>
can be stored in a variable. The build status is invariable.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 previouslyFAILED
and receives a new statusSUCCESS
throughcurrentBuild.result = 'SUCCESS'
it will stayFAILED
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'
}