Conditional step/stage in Jenkins pipeline Conditional step/stage in Jenkins pipeline jenkins jenkins

Conditional step/stage in Jenkins pipeline


Doing the same in declarative pipeline syntax, below are few examples:

stage('master-branch-stuff') {    when {        branch 'master'    }    steps {        echo 'run this stage - ony if the branch = master branch'    }}

stage('feature-branch-stuff') {    when {        branch 'feature/*'    }    steps {        echo 'run this stage - only if the branch name started with feature/'    }}

stage('expression-branch') {    when {        expression {            return env.BRANCH_NAME != 'master';        }    }    steps {        echo 'run this stage - when branch is not equal to master'    }}

stage('env-specific-stuff') {    when {         environment name: 'NAME', value: 'this'     }    steps {        echo 'run this stage - only if the env name and value matches'    }}

More effective ways coming up -https://issues.jenkins-ci.org/browse/JENKINS-41187
Also look at -https://jenkins.io/doc/book/pipeline/syntax/#when


The directive beforeAgent true can be set to avoid spinning up an agent to run the conditional, if the conditional doesn't require git state to decide whether to run:

when { beforeAgent true; expression { return isStageConfigured(config) } }

Release post and docs


UPDATE
New WHEN Clause
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative

equals - Compares two values - strings, variables, numbers, booleans -and returns true if they’re equal. I’m honestly not sure how we missedadding this earlier! You can do "not equals" comparisons using the not{ equals ... } combination too.

changeRequest - In its simplest form, this will return true if thisPipeline is building a change request, such as a GitHub pull request.You can also do more detailed checks against the change request,allowing you to ask "is this a change request against the masterbranch?" and much more.

buildingTag - A simple condition that just checks if the Pipeline isrunning against a tag in SCM, rather than a branch or a specificcommit reference.

tag - A more detailed equivalent of buildingTag, allowing you to checkagainst the tag name itself.


Just use if and env.BRANCH_NAME, example:

    if (env.BRANCH_NAME == "deployment") {                                                  ... do some build ...    } else {                                           ... do something else ...    }                                                                       


According to other answers I am adding the parallel stages scenario:

pipeline {    agent any    stages {        stage('some parallel stage') {            parallel {                stage('parallel stage 1') {                    when {                      expression { ENV == "something" }                    }                    steps {                        echo 'something'                    }                }                stage('parallel stage 2') {                    steps {                        echo 'something'                    }                }            }        }    }}