Как запустить этап / этап сборки только при создании конкретной ветки?
Например, запускайте шаг развертывания, только если ветка вызывается deployment
, а все остальное оставьте без изменений.
Ответы:
То же самое в синтаксисе декларативного конвейера, ниже несколько примеров:
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
Директива beforeAgent true
может быть установлена таким образом, чтобы агент не запускал условное выражение, если условное выражение не требует состояния git для решения, запускать ли:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Выпустить публикацию и документы
ОБНОВЛЕНИЕ
Новый пункт WHEN
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals - сравнивает два значения - строки, переменные, числа, логические значения - и возвращает истину, если они равны. Честно говоря, я не уверен, как мы пропустили добавление этого раньше! Вы можете выполнять сравнения "не равно", используя комбинацию not {equals ...}.
changeRequest - в простейшей форме это вернет истину, если этот конвейер создает запрос на изменение, такой как запрос на извлечение 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'
}
}
}
}
}
}