如何在声明性管道中执行.else

时间:2018-02-14 11:10:47

标签: jenkins jenkins-pipeline

我正在使用声明性管道。这部分有效:

        steps {
            script {
                if ('xxx' == 'cloud') {
                    sh 'xxx'
                } else {
                    sh 'xxx'
                }
            }
        }

但是我想使用when来遵循更具声明性的管道语法。     我试过这样的事情:

        stage ('Newman run') {
            when {
                expression { "xxx" == "cloud" }
            }
            steps {
                echo 'Use proxy for cloud'
                sh 'xx'
            }
            when {
                expression { "cloud" == "cloud" }
            }
            steps {
                echo 'Do not use proxy (non-cloud)'
                sh 'xxx'
            }

但它没有用。如何在声明性管道中的else之后指定一种“when”语句。或者如果这不起作用,推荐的方法是这样做的吗?

2 个答案:

答案 0 :(得分:1)

How to do simple if-statements inside a declarative pipeline in Jenkins

可能重复

您发布的第一个代码段是一个很好的方法。你可以使用' not'这样的第二阶段指令:

stage('then') {
  when {
    <condition>
  }
  steps {
    ...
  }
}
stage('else') {
  when {
    not {
      <condition>
    }
  }
  steps {
    ...
  }
}

但这并不比把它包装在一个&#39;脚本中更好看。声明,因为你甚至会保持这个条件两次。它是您管道中出现的两个独立阶段。

请继续使用脚本块中的if-then-else。

理由:声明性管道的想法是在没有复杂算法的情况下保持简单。当您想要在Jenkins文件中使用if语句,循环等时,请问自己是否做了正确的事情。使用这些东西,如果一般没有错,但可能是你的问题有一个更简单的解决方案。

答案 1 :(得分:0)

when只允许一个stage子句。您需要通过stage子句相互排除两个when来实现您想要的if-else行为。