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

Create a new option for running when condition before stage input

    XMLWordPrintable

Details

    Description

      Currently, when using the "stage-level" input (here: https://jenkins.io/doc/book/pipeline/syntax/#input) the when condition of the stage is evaluated after the input is gathered.  We should add an option so the when condition is evaluated before the input is gathered. Something like:

      stage('Production Deploy') {
          agent { label 'linux' }
          when {
              branch "master"
              beforeInput  true
          }
          input { message 'Deploy to Production?' }
          steps {
              echo 'Deploying to Production ... '
          }             
      }

       
      Use cases

      • Evaluate the when condition before the input has been gathered.

      In scope

       

      Attachments

        Issue Links

          Activity

            elkins Erik Elkins created issue -
            elkins Erik Elkins made changes -
            Field Original Value New Value
            Summary Create a new stage option for running when condition before stage input Create a new option for running when condition before stage input

            We have the same requirement, business case is following:

            • in multibranch pipeline we want to run the build for every branch but
            • deployment should be done only for the master- or hotfix-branches
            • after manual confirmation
            • in other branches the deployment should be skipped without interaction
            tkleiber Torsten Kleiber added a comment - We have the same requirement, business case is following: in multibranch pipeline we want to run the build for every branch but deployment should be done only for the master- or hotfix-branches after manual confirmation in other branches the deployment should be skipped without interaction
            ennef Christopher Fenner made changes -
            Link This issue is duplicated by JENKINS-52240 [ JENKINS-52240 ]

            We have the same requirement:

            • run a stage with input only for specific branches
            ennef Christopher Fenner added a comment - We have the same requirement: run a stage with input only for specific branches
            abayer Andrew Bayer made changes -
            Link This issue is duplicated by JENKINS-52745 [ JENKINS-52745 ]
            abayer Andrew Bayer made changes -
            Assignee Erik Elkins [ elkins ] Andrew Bayer [ abayer ]
            opa Vincent Letarouilly added a comment - - edited

            I found a workaround, just put your input directive inside the steps one like that

             

            stage('Production Deploy') {
                agent { label 'linux' }
                when {
                    branch "master"
                }
                steps {
                    input { message 'Deploy to Production?' }
                    echo 'Deploying to Production ... '
                }             
             }
            

             

            opa Vincent Letarouilly added a comment - - edited I found a workaround, just put your input directive inside the steps one like that   stage( 'Production Deploy' ) {     agent { label 'linux' }    when {      branch "master" }     steps { input { message 'Deploy to Production?' } echo 'Deploying to Production ... ' }              }  

            This workaround blocks an executor for the time waiting for input. Following is wanted (as described in https://jenkins.io/blog/2018/04/09/whats-in-declarative/)

             

            pipeline {
                agent none // no executor is blocked 
                stages {
                    stage('Production Deploy') {
                        when {
                            branch 'master'
                            // beforeInput: true
                        }
                        input { 
                            message 'Deploy to Production?' // For this input can be waited several days
                        }
                        agent any // From here on for executing the steps an executor is needed
                        steps {
                            echo 'Deploying to Production ... '
                        }
                    }
                }
            }
            
            tkleiber Torsten Kleiber added a comment - This workaround blocks an executor for the time waiting for input. Following is wanted (as described in https://jenkins.io/blog/2018/04/09/whats-in-declarative/)   pipeline { agent none // no executor is blocked stages { stage( 'Production Deploy' ) { when { branch 'master' // beforeInput: true } input { message 'Deploy to Production?' // For this input can be waited several days } agent any // From here on for executing the steps an executor is needed steps { echo 'Deploying to Production ... ' } } } }
            jtaboada Jose Blas Camacho Taboada made changes -
            Assignee Andrew Bayer [ abayer ] Jose Blas Camacho Taboada [ jtaboada ]
            abayer Andrew Bayer made changes -
            Description Currently, when using the "stage-level" input (here: [https://jenkins.io/doc/book/pipeline/syntax/#input)] the when condition of the stage is evaluated after the input is gathered.  We should add an option so the when condition is evaluated before the input is gathered. Something like:
            {code:java}
            stage('Production Deploy') {
                agent { label 'linux' }
                when {
                 branch "master"
                    beforeInput: true
                }
                input { message 'Deploy to Production?' }
                steps {
                    echo 'Deploying to Production ... '
                }             
            }{code}
             
            *Use cases*
             * Evaluate the when condition before the input has been gathered.

            *In scope*
             * Declarative pipeline only
             * Only used for input at stage level https://jenkins.io/doc/book/pipeline/syntax/#input

             
            Currently, when using the "stage-level" input (here: [https://jenkins.io/doc/book/pipeline/syntax/#input)] the when condition of the stage is evaluated after the input is gathered.  We should add an option so the when condition is evaluated before the input is gathered. Something like:
            {code:java}
            stage('Production Deploy') {
                agent { label 'linux' }
                when {
                 branch "master"
                    beforeInput true
                }
                input { message 'Deploy to Production?' }
                steps {
                    echo 'Deploying to Production ... '
                }             
            }{code}
             
            *Use cases*
             * Evaluate the when condition before the input has been gathered.

            *In scope*
             * Declarative pipeline only
             * Only used for input at stage level https://jenkins.io/doc/book/pipeline/syntax/#input

             
            jtaboada Jose Blas Camacho Taboada made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            abayer Andrew Bayer made changes -
            Link This issue is duplicated by JENKINS-49947 [ JENKINS-49947 ]
            jtaboada Jose Blas Camacho Taboada made changes -
            Status In Progress [ 3 ] In Review [ 10005 ]
            abayer Andrew Bayer added a comment -

            This’ll be in 1.3.3

            abayer Andrew Bayer added a comment - This’ll be in 1.3.3
            abayer Andrew Bayer made changes -
            Resolution Fixed [ 1 ]
            Status In Review [ 10005 ] Resolved [ 5 ]

            Looks good!

            Q: Can I, and if so how can I make the result of the captured input (the approver) available in a variable?

            johanrydstrom Johan Rydström added a comment - Looks good! Q: Can I, and if so how can I make the result of the captured input (the approver) available in a variable?

            Thanks, works as requested.

            tkleiber Torsten Kleiber added a comment - Thanks, works as requested.
            bitwiseman Liam Newman added a comment -

            Bulk closing resolved issues.

            bitwiseman Liam Newman added a comment - Bulk closing resolved issues.
            bitwiseman Liam Newman made changes -
            Status Resolved [ 5 ] Closed [ 6 ]

            Just a warning, the beforeInput is not documented in the article nor in the snippet generator. I just faced this and the only solution is in Torsten's comment.

            alecharp Adrien Lecharpentier added a comment - Just a warning, the beforeInput is not documented in the article nor in the snippet generator. I just faced this and the only solution is in Torsten's comment .

            People

              jtaboada Jose Blas Camacho Taboada
              elkins Erik Elkins
              Votes:
              9 Vote for this issue
              Watchers:
              15 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: