Jenkins pipeline if else not working Jenkins pipeline if else not working jenkins jenkins

Jenkins pipeline if else not working


your first try is using declarative pipelines, and the second working one is using scripted pipelines. you need to enclose steps in a steps declaration, and you can't use if as a top-level step in declarative, so you need to wrap it in a script step. here's a working declarative version:

pipeline {    agent any    stages {        stage('test') {            steps {                sh 'echo hello'            }        }        stage('test1') {            steps {                sh 'echo $TEST'            }        }        stage('test3') {            steps {                script {                    if (env.BRANCH_NAME == 'master') {                        echo 'I only execute on the master branch'                    } else {                        echo 'I execute elsewhere'                    }                }            }        }    }}

you can simplify this and potentially avoid the if statement (as long as you don't need the else) by using "when". See "when directive" at https://jenkins.io/doc/book/pipeline/syntax/. you can also validate jenkinsfiles using the jenkins rest api. it's super sweet. have fun with declarative pipelines in jenkins!


It requires a bit of rearranging, but when does a good job to replace conditionals above. Here's the example from above written using the declarative syntax. Note that test3 stage is now two different stages. One that runs on the master branch and one that runs on anything else.

stage ('Test 3: Master') {    when { branch 'master' }    steps {         echo 'I only execute on the master branch.'     }}stage ('Test 3: Dev') {    when { not { branch 'master' } }    steps {        echo 'I execute on non-master branches.'    }}


If you wanted to create a condition to execute only a stage based on expression you can use keyword when

stage ('test3'){    when { expression { return env.BRANCH_NAME == 'master'} }    steps {           echo 'I only execute on the master branch.'          }    }}

With the expression key word you can add any condition.

e.g. if stage is dependent on generated file in workspace.

stage ('File Dependent stage'){ when { expression { return fileExists ('myfile') } }    steps {           echo "file exists"          }    }}