Умовний крок / етап у трубопроводі Дженкінса


90

Як запустити крок / етап складання, лише якщо будується певна гілка?

Наприклад, запустіть крок розгортання, лише якщо викликана гілка deployment, залишивши все те саме.

Відповіді:


181

Виконуючи те саме в декларативному синтаксисі конвеєра, нижче наведено кілька прикладів:

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, що дозволяє перевіряти відповідність імені самого тегу.


1
чи можу я використовувати це для дій збірки публікацій?
Даг

1
Я вважаю, що Дженкінс обертає вказаного агента, навіть якщо when{}умова оцінюється як помилкове. :(
Трейказ

1
@Trejkaz тепер можна використовувати, beforeAgent trueщоб цього уникнути
Нік Джонс,

1
@NickJones справді beforeAgentзараз вирішує цю проблему.
Трейказ

45

Просто використовуйте ifта env.BRANCH_NAME, приклад:

    if (env.BRANCH_NAME == "deployment") {                                          
        ... do some build ...
    } else {                                   
        ... do something else ...
    }                                                                       

4
якщо це має бути до етапу або після?
Реактивний літак

5
Перед етапом, етапи можуть бути всередині, якщо гілки
Кшиштоф Красонь

не думайте, що розміщення насправді має значення
omu_negru

9
Я не можу отримати цю роботу за допомогою декларативного конвеєру. Чи працює це з декларативними конвеєрами? WorkflowScript: 9: Очікується етап @ рядок 9, стовпець 9. if (env.BRANCH_NAME == "розгортання") {WorkflowScript: 8: Не вказано етапів @ рядок 8, стовпець 5. етапи {
pitchblack408

4
це працює лише в сценаріях конвеєрів. для декларативних конвеєрів слід використовувати сценарій {} всередині кроку.
Педро Енріке

1

Згідно з іншими відповідями, я додаю сценарій паралельних етапів:

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'
                    }
                }
            }
        }
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.