Як запустити крок / етап складання, лише якщо будується певна гілка?
Наприклад, запустіть крок розгортання, лише якщо викликана гілка deployment
, залишивши все те саме.
Відповіді:
Виконуючи те саме в декларативному синтаксисі конвеєра, нижче наведено кілька прикладів:
stage('master-branch-stuff'){
agent any
when{
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
<b
stage('feature-branch-stuff') {
agent label:'test-node'
when { branch "feature/*" }
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
<b
stage('expression-branch') {
agent label:'some-node'
when {
expression {
return env.BRANCH_NAME != 'master';
}
}
steps {
echo 'run this stage - when branch is not equal to master'
}
}
<b
stage('env-specific-stuff') {
agent label:'test-node'
when {
environment name: 'NAME', value: 'this'
}
steps {
echo 'run this stage - only if the env name and value matches'
}
}
Більш ефективні шляхи -
https://issues.jenkins-ci.org/browse/JENKINS-41187
Також подивіться -
https://jenkins.io/doc/book/pipeline/syntax/#when
Директиву beforeAgent true
можна встановити, щоб уникнути закручування агента для запуску умовного, якщо умовне не вимагає стану git для вирішення, запускати:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Випуск публікації та документів
ОНОВИТИ
Нове, коли пункт
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals - Порівнює два значення - рядки, змінні, числа, логічні значення - і повертає true, якщо вони рівні. Я чесно не впевнений, як ми пропустили це додати раніше! Ви можете робити порівняння "не дорівнює", використовуючи також комбінацію не {дорівнює ...}.
changeRequest - у найпростішій формі це поверне true, якщо цей конвеєр будує запит на зміну, наприклад, запит на витяг GitHub. Ви також можете виконати більш детальну перевірку щодо запиту на зміну, дозволяючи запитати: "це запит на зміни щодо головної гілки?" і набагато більше.
buildingTag - проста умова, яка просто перевіряє, чи працює конвеєр проти тегу в SCM, а не гілки або конкретного посилання на коміт.
tag - Більш детальний еквівалент buildingTag, що дозволяє перевіряти відповідність імені самого тегу.
when{}
умова оцінюється як помилкове. :(
beforeAgent true
щоб цього уникнути
beforeAgent
зараз вирішує цю проблему.
Просто використовуйте if
та env.BRANCH_NAME
, приклад:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Згідно з іншими відповідями, я додаю сценарій паралельних етапів:
pipeline {
agent any
stages {
stage('some parallel stage') {
parallel {
stage('parallel stage 1') {
when {
expression { ENV == "something" }
}
steps {
echo 'something'
}
}
stage('parallel stage 2') {
steps {
echo 'something'
}
}
}
}
}
}