Conditional step/stage in Jenkins pipeline

前端 未结 3 1620
无人及你
无人及你 2020-12-12 15:52

How do you run a build step/stage only if building a specific branch?

For example, run a deployment step only if the branch is called deployment, leavin

相关标签:
3条回答
  • 2020-12-12 16:39

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

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

    <b

    stage('feature-branch-stuff') {
        agent label:'test-node'
        when { branch "feature/*" }
        steps {
            echo 'run this stage - only if the branch name started with feature/'
        }
    }
    

    <b

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

    <b

    stage('env-specific-stuff') {
        agent label:'test-node'
        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 missed adding this earlier! You can do "not equals" comparisons using the not { equals ... } combination too.

    changeRequest - In its simplest form, this will return true if this Pipeline 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 master branch?" and much more.

    buildingTag - A simple condition that just checks if the Pipeline is running against a tag in SCM, rather than a branch or a specific commit reference.

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

    0 讨论(0)
  • 2020-12-12 16:49

    Just use if and env.BRANCH_NAME, example:

        if (env.BRANCH_NAME == "deployment") {                                          
            ... do some build ...
        } else {                                   
            ... do something else ...
        }                                                                       
    
    0 讨论(0)
  • 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'
                        }
                    }
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题