我正在使用声明性管道。这部分有效:
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
”语句。或者如果这不起作用,推荐的方法是这样做的吗?
答案 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行为。