Условный шаг/этап в pipeопроводе Дженкинса

Как выполнить шаг/этап сборки, только если создается определенная ветка?

Например, выполните шаг развертывания, только если ветвь называется deployment, а все остальное остается тем же.

Ответы

Ответ 1

Делая то же самое в декларативном синтаксисе конвейера, ниже приведено несколько примеров:

stage('master-branch-stuff'){
  agent any
  when{
    branch 'master'
  }
  steps {
    echo 'run this stage - ony if the branch = master branch'
  }
}

stage('feature-branch-stuff') {
    agent label:'test-node'
    when { branch "feature/*" }
    steps {
        echo 'run this stage - only if the branch name started with feature/'
    }
}

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'
    }
}

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


ОБНОВИТЬ
Новый КОГДА пункт
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative

equals - сравнивает два значения - строки, переменные, числа, логические значения - и возвращает true, если они равны. Я честно не уверен, как мы пропустили добавление этого ранее! Вы можете делать сравнения "не равно", используя комбинацию not {equals...}.

changeRequest - в простейшей форме это вернет true, если этот конвейер создает запрос на изменение, такой как запрос на получение GitHub. Вы также можете выполнить более подробные проверки запроса на изменение, что позволит вам спросить: "Это запрос на изменение в основной ветки?" и многое другое.

buildingTag - простое условие, которое просто проверяет, работает ли конвейер с тегом в SCM, а не с веткой или конкретной ссылкой фиксации.

tag - более подробный эквивалент buildingTag, позволяющий проверять само имя тега.

Ответ 2

Просто используйте if и env.BRANCH_NAME, например:

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