Jenkins Pipeline Conditional Step / Stage

时间:2016-06-07 23:13:52

标签: jenkins groovy jenkins-pipeline

如何仅在特定分支时运行构建步骤/阶段。

即。为每个pull请求/分支运行所有内容,但如果正在构建的分支名为deployment,那么还要运行部署步骤吗?

3 个答案:

答案 0 :(得分:96)

在声明性管道语法中做同样的事情,下面是几个例子:

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

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

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'
    }
}

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'
    }
}

更有效的方法 - https://issues.jenkins-ci.org/browse/JENKINS-41187
还看看 - https://jenkins.io/doc/book/pipeline/syntax/#when

<强>更新
新的WHEN条款
参考:https://jenkins.io/blog/2018/04/09/whats-in-declarative

  

equals - 比较两个值 - 字符串,变量,数字,布尔值 -   如果它们相等则返回true。我老实说不确定我们错过了什么   先添加这个!您可以使用not进行“not equals”比较   {equals ...}组合。

     

changeRequest - 以最简单的形式,如果这样,它将返回true   Pipeline正在构建一个更改请求,例如GitHub拉取请求。   您还可以针对更改请求执行更详细的检查,   允许你问“这是对主人的变更请求吗?   分支?“还有更多。

     

buildingTag - 一个简单的条件,只检查管道是否   针对SCM中的标记运行,而不是分支或特定的   提交参考。

     

标签 - 更详细的buildingTag等价物,允许您检查   反对标签名称本身。

答案 1 :(得分:35)

只需使用seqif,例如:

env.BRANCH_NAME

答案 2 :(得分:1)

根据其他答案,我添加了并行阶段方案:

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'
                    }
                }
            }
        }
    }
}