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

Den*_*boy 5 jenkins jenkins-pipeline

我正在使用声明性管道。这部分的工作原理:

        steps {
            script {
                if ('xxx' == 'cloud') {
                    sh 'xxx'
                } else {
                    sh 'xxx'
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

但我想使用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'
            }
Run Code Online (Sandbox Code Playgroud)

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

Hen*_*kow 9

可能重复如何在 Jenkins 的声明性管道中执行简单的 if 语句

您发布的第一个片段是一个很好的方法。您可以在第二阶段使用“not”指令,如下所示:

stage('then') {
  when {
    <condition>
  }
  steps {
    ...
  }
}
stage('else') {
  when {
    not {
      <condition>
    }
  }
  steps {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但这看起来并不比将其包装在“脚本”语句中更好,因为您甚至会维护该条件两次。它是出现在您的管道中的两个独立的阶段。

因此,请保留脚本块内的 if-then-else。

理由:声明式管道的想法是保持简单,而不包含复杂的算法。当您想在 Jenkinsfile 中使用 if 语句、循环等时,问问自己是否在做正确的事情。使用这些东西如果一般来说没有错的话,但可能有一个更简单的解决方案可以解决您的问题。