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
ORで囲まれているため、このステージを実行する必要があります。ブランチがdevelop
とAUTO_BUILD = true, BUILD_OPT = snapshot
。
しかし、私がAUTO_BUILD = false
。ステージは実行されませんでした。何か不足していますか?
ここで、宣言型条件には2つの問題があります。まず、以下を見てください。
_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
_のブール型をチェックしています。値に文字列_'false'
_が割り当てられている場合、型チェックは失敗し、条件は期待どおりに動作しません。文字列_env.AUTO_BUILD
_ではなく、ブール値_env.AUTO_BUILD = false
_として環境_env.AUTO_BUILD = 'false'
_割り当てを入力すると、これが修正されます。