Continue Jenkins pipeline past failed stage

John McGehee picture John McGehee · Nov 15, 2016 · Viewed 58.6k times · Source

I have a series of stages that perform quick checks. I want to perform them all, even if there are failures. For example:

stage('one') {
    node {
        sh 'exit 0'
    }
}
stage('two') {
    node {
        sh 'exit 1'   // failure
    }
}
stage('three') {
    node {
        sh 'exit 0'
    }
}

Stage two fails, so by default stage three is not executed.

Ordinarily this would be a job for parallel, but I want to display them in the stage view. In the mock up below:

  • Build #4 shows what normally happens. Job two fails so three does not run.
  • I Photoshopped Build #6 to show what I would like to see. Job two fails and is displayed as such, but three still runs. The real Jenkins would probably display the entire Build #6 tinged slightly red, which is of course fine.

Mock up of desired Stage View result

Answer

Erik B picture Erik B · Jul 10, 2019

This is now possible. Below is an example of a declarative pipeline, but catchError works for scripted pipelines as well.

pipeline {
    agent any
    stages {
        stage('1') {
            steps {
                sh 'exit 0'
            }
        }
        stage('2') {
            steps {
                catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
                    sh "exit 1"
                }
            }
        }
        stage('3') {
            steps {
                sh 'exit 0'
            }
        }
    }
}

In the example above, all stages will execute, the pipeline will be successful, but stage 2 will show as failed:

Pipeline Example

As you might have guessed, you can freely choose the buildResult and stageResult, in case you want it to be unstable or anything else. You can even fail the build and continue the execution of the pipeline.

Just make sure your Jenkins is up to date, since this is a fairly new feature.

EDIT: You need "Pipeline: Basic Steps" 2.16 (May 14, 2019)