Как указать, когда ветвь НЕ (название ветки) в jenkinsfile?
Как я могу указать что-то вроде следующего в моем Jenkinsfile?
когда ветка не х
Я знаю, как определить конкретные задачи отрасли, такие как:
stage('Master Branch Tasks') {
when {
branch "master"
}
steps {
sh '''#!/bin/bash -l
Do some stuff here
'''
}
}
Однако я хотел бы указать этап, когда ветвь не является главной или промежуточной, как показано ниже:
stage('Example') {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
Однако вышеупомянутое не работает и терпит неудачу со следующими ошибками:
WorkflowScript: 62: Not a valid stage section definition: "if
WorkflowScript: 62: Nothing to execute within stage "Example"
Источник примечания для моей неудачной попытки: https://jenkins.io/doc/book/pipeline/syntax/
4 ответа
После устранения этой проблемы вы можете сделать следующее:
stage('Example (Not master)') {
when {
not {
branch 'master'
}
}
steps {
sh 'do-non-master.sh'
}
}
Вы также можете указать несколько условий (в данном случае имена веток), используя anyOf
:
stage('Example (Not master nor staging)') {
when {
not {
anyOf {
branch 'master';
branch 'staging'
}
}
}
steps {
sh 'do-non-master-nor-staging.sh'
}
}
В этом случае do-non-master-nor-staging.sh
будет работать на всех ветвях, кроме главной и промежуточной.
Вы можете прочитать о встроенных условиях и общем синтаксисе конвейера здесь.
Ссылка из вашего поста показывает пример со скриптовым конвейерным синтаксисом. Ваш код использует декларативный синтаксис конвейера. Для использования скриптового конвейера в декларативном режиме вы можете использовать шаг скрипта.
stage('Example') {
steps {
script {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
}
}
Для тех, кто хочет использовать значения env, а также в случае декларативного конвейера и динамической выборки ветвей вы можете определить свои собственные переменные глобально и использовать, как показано ниже.[Переменная "deployBranch" должна быть объявлена перед конвейером и обновлена в файле этап от предыдущего к текущему этапу или перед использованием оценки ]
stage ('checkout-NonMaster') {
when {
not {
environment(name: "deployBranch", value: "master")
}
}
steps {
<anything goes here like groovy code or shell commands>
}
}