#jenkins #jenkins-pipeline #crontrigger #multibranch-pipeline
#дженкинс #дженкинс-конвейер #crontrigger #многоразветвленный конвейер
Вопрос:
Я ищу возможность реализовать разные триггеры cron для каждой ветви в задании декларативного конвейера jenkins. На данный момент я запускаю только почасовые сборки в нашей ветке разработчиков:
String cron_string = BRANCH_NAME == "dev" ? "@hourly" : ""
pipeline {
triggers {
cron(cron_string)
}
//stages, options and more code here...
}
Моей целью было бы иметь две отдельные строки cron, которые запускали бы сборки в разное время в отдельных ветвях (например: ежечасные сборки в dev, каждые три часа сборки в master), однако выполнение было бы идентичным. Мой вопрос в том, могу ли я сделать что-то вроде приведенного ниже блока кода или мне следует использовать другой подход?
String cron_string_1 = BRANCH_NAME == "dev" ? "0 8/20 ? * MON-FRY" : ""
String cron_string_2 = BRANCH_NAME == "master" ? "0 8/20/3 ? * MON-FRY" : ""
pipeline {
triggers {
cron(cron_string)
}
//stages, options and more code here...
}
Комментарии:
1. Привет, Хосе, лучше всего здесь был бы многоотраслевой конвейер с разными триггерами для каждой ветви (файлы дженкинса будут немного отличаться, но в этом суть многоотраслевого конвейера).
2. Вы когда-нибудь находили обходной путь для этого?
3. В итоге мы создали файл Jenkins для каждой ветви и отдельные задания для них.
Ответ №1:
У меня это сработало (используя скриптовые конвейеры):
if (BRANCH_NAME == "dev") {
properties(
[
pipelineTriggers([cron('0 8,13,17 * * *')])
]
)
}
Комментарии:
1. Это не будет работать для нескольких ветвей. Предполагая, что ветвь разработчика создает первое задание, конвейер будет запущен и запланирует следующую сборку в соответствии с cron. Теперь, независимо от того, какая ветвь создает следующее задание, оно будет выполняться в соответствии с cron ветви разработчика. То же самое относится и к cron главной ветви.