gpt4 book ai didi

jenkins-pipeline - 声明式管道 - 使用 when 条件,如何处理嵌套条件 anyOf/allOf/not

转载 作者:行者123 更新时间:2023-12-03 14:36:03 26 4
gpt4 key购买 nike

我被困在如何正确使用 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
}

从我的理解来看,如果我设置 env.AUTO_BUILD = false ,那么这个阶段应该被执行,因为它包含在 anyOf 中或者如果我的分支是例如它会执行 developAUTO_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.+/}
}

这里的问题是 !=~不是 Groovy 中“不匹配正则表达式”的有效运算符。您可以将其替换为 !(env.BRANCH_NAME =~ /feature/)像这样:
allOf {
expression{env.BRANCH_NAME != 'master'}
expression{env.AUTO_BUILD == true && env.BUILD_OPT == snapshot && !(env.BRANCH_NAME =~ /feature/)}
}

实现你想要的行为。

其次,在有条件的情况下:
expression{env.AUTO_BUILD == false}

表达式正在检查 env.AUTO_BUILD 中的 bool 类型.如果该值被分配一个字符串 'false' ,则类型检查将失败并且条件不会按预期运行。输入环境 env.AUTO_BUILD赋值为 bool 值 env.AUTO_BUILD = false而不是字符串 env.AUTO_BUILD = 'false'会为你解决这个问题。

关于jenkins-pipeline - 声明式管道 - 使用 when 条件,如何处理嵌套条件 anyOf/allOf/not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com