Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-55987

Use of when buildingTag does not work in Declarative pipeline

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: Minor
    • Resolution: Unresolved
    • Component/s: pipeline
    • Labels:
      None
    • Environment:
      docker environment
    • Similar Issues:

      Description

      For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker
      I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
       In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)}}
      I added the following line:
         when

           { buildingTag() }

       

      But every time I push a tag in gitlab, I have the message Stage skipped due to when conditional

      Attached the Jenkinsfile I'm using

      Context

      • Gitlab plugin version: 1.5.11
      • Gitlab CE version: 11.2.0
      • Jenkins version: 2.163
      • Job type: Pipeline (the pipeline plugins are up to date)

      Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

      Attached the console output triggered when after the push of a tag using the command:

      git push --tag origin master

       

       

      Is there something special to do to use the when tag or when buildingTag ? It seems to me I have done everything according to the documentation

        Attachments

          Activity

          dtronche Tronche Dominique created issue -
          dtronche Tronche Dominique made changes -
          Field Original Value New Value
          Description For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker
           I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
           In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)
           I added the following line
           {{when \{ buildingTag() }}}
           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_

          Here is the Jenkinsfile I'm using:

           

          {{pipeline {}}
          {{   agent any }}
          {{   stages {}}
          {{     stage('Build') {}}
          {{      steps {}}
          {{         gitlabCommitStatus(name:"build") {}}
          {{         script { }}
          {{           docker.withRegistry('Nexus URL', 'docker-pull-id') {}}
          {{              app = docker.build("my-project","--my proxy options") }}
          {{           }}}
          {{         }}}
          {{        } }}
          {{       }}}
          {{     }}}
          {{     stage('Push image') {}}
          {{       steps {}}
          {{         script { }}
          {{           docker.withRegistry('Nexus URL', 'docker-push-id') {}}
          {{           app.push("latest")}}
          {{         }}}
          {{        }}}
          {{      }}}
          {{     }}}
          {{     stage('Push tag image') {}}
          {{       when \{ buildingTag() }}}
          {{        steps {}}
          {{          script { }}
          {{             docker.withRegistry('Nexus URL', 'docker-pull-id')') {}}
          {{               app.push("tag")}}
          {{            }}}
          {{          }}}
          {{       }}}
          {{    }}}
          {{  }}}
          {{}}}
          h3. Context

          {{}}
           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

          {{}}

          {{}}

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation{{}}
          For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker
           I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
           In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)
           I added the following line
           \{{when { buildingTag() }}}
           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_

          Here is the Jenkinsfile I'm using:
          {{pipeline {
             agent any
             stages {
               stage('Build') {
                steps {
                   gitlabCommitStatus(name:"build") {
                   script {
                     docker.withRegistry('Nexus URL', 'docker-pull-id') {
                        app = docker.build("my-project","--my proxy options")
                     }
                   }
                  }
                 }
               }
               stage('Push image') {
                 steps {
                   script {
                     docker.withRegistry('Nexus URL', 'docker-push-id') {
                     app.push("latest")
                   }
                  }
                }
               }
               stage('Push tag image') {
                 when { buildingTag() }
                  steps {
                    script {
                       docker.withRegistry('Nexus URL', 'docker-pull-id')') {
                         app.push("tag")
                      }
                    }
                 }
              }
            }
          }
          }}
           
          h3. Context


           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

          {{}}

          {{}}

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation\{{}}
          dtronche Tronche Dominique made changes -
          Description For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker
           I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
           In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)
           I added the following line
           \{{when { buildingTag() }}}
           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_

          Here is the Jenkinsfile I'm using:
          {{pipeline {
             agent any
             stages {
               stage('Build') {
                steps {
                   gitlabCommitStatus(name:"build") {
                   script {
                     docker.withRegistry('Nexus URL', 'docker-pull-id') {
                        app = docker.build("my-project","--my proxy options")
                     }
                   }
                  }
                 }
               }
               stage('Push image') {
                 steps {
                   script {
                     docker.withRegistry('Nexus URL', 'docker-push-id') {
                     app.push("latest")
                   }
                  }
                }
               }
               stage('Push tag image') {
                 when { buildingTag() }
                  steps {
                    script {
                       docker.withRegistry('Nexus URL', 'docker-pull-id')') {
                         app.push("tag")
                      }
                    }
                 }
              }
            }
          }
          }}
           
          h3. Context


           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

          {{}}

          {{}}

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation\{{}}
          For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker
           I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
           In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)
           I added the following line
           {{when

          { buildingTag() }}}
           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_
           
           Here is the Jenkinsfile I'm using:
           {{pipeline {
           agent any
           stages {
           stage('Build') {
           steps {
           gitlabCommitStatus(name:"build") {
           script {
           docker.withRegistry('Nexus URL', 'docker-pull-id') \{ app = docker.build("my-project","--my proxy options") }
           }
           }
           }
           }
           stage('Push image') {
           steps {
           script {
           docker.withRegistry('Nexus URL', 'docker-push-id') \{ app.push("latest") }
           }
           }
           }
           stage('Push tag image') {
           when \{ buildingTag() }

          steps {
           script {
           docker.withRegistry('Nexus URL', 'docker-pull-id')')

          { app.push("tag") }

          }
           }
           }
           }
           }
           }}
            
          h3. Context
           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

          {{}}

          {{}}

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation\{{}}
          dtronche Tronche Dominique made changes -
          Description For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker
           I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
           In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)
           I added the following line
           {{when

          { buildingTag() }}}
           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_
           
           Here is the Jenkinsfile I'm using:
           {{pipeline {
           agent any
           stages {
           stage('Build') {
           steps {
           gitlabCommitStatus(name:"build") {
           script {
           docker.withRegistry('Nexus URL', 'docker-pull-id') \{ app = docker.build("my-project","--my proxy options") }
           }
           }
           }
           }
           stage('Push image') {
           steps {
           script {
           docker.withRegistry('Nexus URL', 'docker-push-id') \{ app.push("latest") }
           }
           }
           }
           stage('Push tag image') {
           when \{ buildingTag() }

          steps {
           script {
           docker.withRegistry('Nexus URL', 'docker-pull-id')')

          { app.push("tag") }

          }
           }
           }
           }
           }
           }}
            
          h3. Context
           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

          {{}}

          {{}}

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation\{{}}
          {{For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker}}
          {{ I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project}}
          {{ In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)}}
          {{ I added the following line}}
          {{ when}}{{{ buildingTag() }}}


           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_

          Attached the Jenkinsfile I'm using


          h3. Context
           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

           

           

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation\{{}}
          Attachment Jenkinsfile [ 45938 ]
          dtronche Tronche Dominique made changes -
          Description {{For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker}}
          {{ I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project}}
          {{ In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)}}
          {{ I added the following line}}
          {{ when}}{{{ buildingTag() }}}


           But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_

          Attached the Jenkinsfile I'm using


          h3. Context
           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

           

           

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation\{{}}
          {{For our project we are using gitlab-ce and Jenkins to build docker images. I'm using a Pipeline Jenkinsfile to build my docker}}
          I suppose my jenkins job is correctly configured since the build is triggered each time I push a commit or a tag into my gitlab project
           In my pipeline, I have a stage I wish to be called only when a tag is pushed (git push --tag)}}
           I added the following line:
             when

               \{ buildingTag() }

           

          But every time I push a tag in gitlab, I have the message _Stage skipped due to when conditional_

          Attached the Jenkinsfile I'm using
          h3. Context
           * *Gitlab plugin version*: 1.5.11
           * *Gitlab CE version*: 11.2.0
           * *Jenkins version*: 2.163
           * *Job type*: Pipeline (the pipeline plugins are up to date)

          Our Jenkins docker container is based on image jenkins/jenkins:2.163-alpine

          Attached the console output triggered when after the push of a tag using the command:

          {{git push --tag origin master}}

           

           

          Is there something special to do to use the _when tag_ or _when buildingTag_ ? It seems to me I have done everything according to the documentation
          dotconnor Connor Love made changes -
          Rank Ranked higher
          Hide
          dotconnor Connor Love added a comment -

          Any update on this?

          Show
          dotconnor Connor Love added a comment - Any update on this?
          Hide
          cristianrat cris rat added a comment - - edited

          major blocker for me as well

          Show
          cristianrat cris rat added a comment - - edited major blocker for me as well
          Hide
          raspy Krzysztof Malinowski added a comment -

          Attached log misses the important output of actual cloning so it's impossible to verify, but most times it's because you are not actually building a tag. You need to check out the tag (i.e. by starting build from the Tags tab of a multibranch pipeline) to make those conditions work. It is not enough to just build a commit that happens to have tags applied. Make sure that the Checking out Revision line (not included in attached output) lists a tag, not a branch.

          Show
          raspy Krzysztof Malinowski added a comment - Attached log misses the important output of actual cloning so it's impossible to verify, but most times it's because you are not actually building a tag. You need to check out the tag (i.e. by starting build from the Tags tab of a multibranch pipeline) to make those conditions work. It is not enough to just build a commit that happens to have tags applied. Make sure that the Checking out Revision line (not included in attached output) lists a tag, not a branch.
          dtronche Tronche Dominique made changes -
          Attachment jenkins-console-output-scm.log [ 49706 ]
          Hide
          dtronche Tronche Dominique added a comment - - edited

          Thanks for the update. This bug is really blocking for our team since I cannot use Declarative pipeline in our project due to it

          I have attached a log file with the detail scm part of the jenkins log file. The Checking out Revision indicates we are on a tag, yet the stage is skipped

          I am not using a multibranch pipeline but a simple pipeline project. I did not see any limitation on the documentation on this subject. We are not planning to use multibranch pipelines since this item does not offer the "Build after other projects are built" option and we need it

          Show
          dtronche Tronche Dominique added a comment - - edited Thanks for the update. This bug is really blocking for our team since I cannot use Declarative pipeline in our project due to it I have attached a log file with the detail scm part of the jenkins log file. The Checking out Revision indicates we are on a tag, yet the stage is skipped I am not using a multibranch pipeline but a simple pipeline project. I did not see any limitation on the documentation on this subject. We are not planning to use multibranch pipelines since this item does not offer the "Build after other projects are built" option and we need it
          Hide
          raspy Krzysztof Malinowski added a comment -

          Technically this condition checks for existence of environment variable called TAG_NAME. This is normally contributed by Branch API, for multibranch approach. If you don't use multibranching, you can try to populate TAG_NAME yourself before the condition, or just rework the condition.

          Show
          raspy Krzysztof Malinowski added a comment - Technically this condition  checks for existence of environment variable called TAG_NAME. This is normally contributed by Branch API, for multibranch approach. If you don't use multibranching, you can try to populate TAG_NAME yourself before the condition, or just rework the condition.
          Hide
          dtronche Tronche Dominique added a comment -

          OK now I understand why it does not work but do we agree that this limitation is clearly not documented ?

          I remembered I tried to do it myself but I had quite some trouble implementing it and it was very frustrating when there is supposed to be a function that do it for you.

          Personally I don't really understand why this function, which is probably needed by a lot of people, is restricted to multibranch. Especially since multibranch does not allow project dependency which is a bit one of the main reason Jenkins is used for...

          Thanks for your help anyway

          Show
          dtronche Tronche Dominique added a comment - OK now I understand why it does not work but do we agree that this limitation is clearly not documented ? I remembered I tried to do it myself but I had quite some trouble implementing it and it was very frustrating when there is supposed to be a function that do it for you. Personally I don't really understand why this function, which is probably needed by a lot of people, is restricted to multibranch. Especially since multibranch does not allow project dependency which is a bit one of the main reason Jenkins is used for... Thanks for your help anyway

            People

            • Assignee:
              Unassigned
              Reporter:
              dtronche Tronche Dominique
            • Votes:
              3 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated: