Execute Jenkins Pipeline step only when building a tag

vossad01 picture vossad01 · Jan 21, 2018 · Viewed 13.7k times · Source

I have certain build logic, such as publication, that I would like to have Jenkins perform only when it is building a Git tag. How can I accomplish this using Jenkin's Declarative Pipeline?

In other words, I am trying to build functionality equivalent to Travis CI's deploy on tags functionality:

deploy:
  [...]
  on: 
    tags: true

There is a built-in condition to check the branch, but I do not see one that indicates the tag.

Answer

vossad01 picture vossad01 · Jan 21, 2018

Update: As of version 1.2.8 of the Pipeline Model Definition Plugin you can now use buldingTag():

stage('Deploy') {
  when {
    buildingTag()
  }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

When using the Multibranch Pipeline configuration you can use the expression condition along with the TAG_NAME environment variable provided by the underlying Branch API Plugin. Unfortunately, you can't directly check if the environment variable is defined at the Groovy level (API restrictions) so you have to test in in the shell:

stage('Deploy') {
  when { expression { sh([returnStdout: true, script: 'echo $TAG_NAME | tr -d \'\n\'']) } }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

The above takes advantage of non-empty strings being truthy in Groovy.

An easier way may be introduced in future versions. See jenkinsci/pipeline-model-definition-plugin#240.