Декларативный конвейер - использование условия когда, как делать вложенные условия anyOf / allOf / not - PullRequest
0 голосов
/ 13 декабря 2018

Я застрял в том, как правильно использовать вложенные условия, как предложено в синтаксисе Дженкинса.

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 ИЛИ он будет выполнен, если моя ветвь была, например, develop и AUTO_BUILD = true, BUILD_OPT = snapshot.
Однако это был не тот случай, когда я установил AUTO_BUILD = false.Этап не был выполнен.Я что-то упустил?

1 Ответ

0 голосов
/ 13 декабря 2018

Здесь есть две проблемы в декларативных условных выражениях.Во-первых, глядя на:

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' исправит это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...