web-dev-qa-db-ja.com

宣言的パイプライン-when条件の使用、ネストされた条件anyOf / allOf / notの実行方法

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 = falseanyOf ORで囲まれているため、このステージを実行する必要があります。ブランチがdevelopAUTO_BUILD = true, BUILD_OPT = snapshot
しかし、私がAUTO_BUILD = false。ステージは実行されませんでした。何か不足していますか?

8
Tai Ly

ここで、宣言型条件には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'_割り当てを入力すると、これが修正されます。

8
Matt Schuchard