Tai*_* Ly 5 jenkins-pipeline jenkins-declarative-pipeline
我被困在如何正确使用Jenkins语法中提出的嵌套条件。
https://jenkins.io/doc/book/pipeline/syntax/#when
这是我目前的阶段:
stage('Build'){
when{
anyOf{
allOf{
expression{env.BRANCH_NAME != 'master'}
expression{env.AUTO_BUILD == true && env.BUILD_OPT == snapshot && env.BRANCH_NAME !=~ /feature.+/}
}
expression{env.AUTO_BUILD == false}
}
}
steps{
echo env.AUTO_BUILD
echo env.BUILD_OPT
echo env.BRANCH_NAME
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,如果我设置env.AUTO_BUILD = false,那么应该执行此阶段,因为它包含在anyOfOR中,如果我的分支是eg develop和,它将执行AUTO_BUILD = true, BUILD_OPT = snapshot。
但是,当我设置时情况并非如此AUTO_BUILD = false。该阶段未执行。我想念什么吗?
声明条件中有两个问题。首先,看一下:
allOf {
expression{env.BRANCH_NAME != 'master'}
expression{env.AUTO_BUILD == true && env.BUILD_OPT == snapshot && env.BRANCH_NAME !=~ /feature.+/}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是!=~Groovy中不是“不匹配正则表达式”的有效运算符。您可以这样替换它!(env.BRANCH_NAME =~ /feature/):
allOf {
expression{env.BRANCH_NAME != 'master'}
expression{env.AUTO_BUILD == true && env.BUILD_OPT == snapshot && !(env.BRANCH_NAME =~ /feature/)}
}
Run Code Online (Sandbox Code Playgroud)
实现您想要的行为。
其次,在条件:
expression{env.AUTO_BUILD == false}
Run Code Online (Sandbox Code Playgroud)
该表达式正在检查中的布尔类型env.AUTO_BUILD。如果为该值分配了一个string 'false',则类型检查将失败并且条件语句将无法按预期运行。将环境env.AUTO_BUILD分配输入为布尔值env.AUTO_BUILD = false而不是字符串env.AUTO_BUILD = 'false'将为您解决此问题。
| 归档时间: |
|
| 查看次数: |
4155 次 |
| 最近记录: |