Ответ 1
Кажется, что невозможно создать Jenkinsfile как buildstep в проекте с несколькими конфигурациями. Файл Jenkins используется в задании Pipeline, которое также является типом работы, а Jenkins не поддерживает (легко) преобразование между типами заданий. В дополнение к этому, buildstep подразумевает, что он запускается на определенном node в слоте исполнителя. Однако Jenkinsfile оценивается мастером и сам определяет buildsteps (с их метками node), которые по своей сути сталкивались бы, если бы они выполнялись в самом сборке.
Можно запустить конвейер через задание с несколькими конфигурациями и предоставить ему параметры из задания с несколькими конфигурациями. (Я также использовал параметризованный триггерный плагин для этого)
У моего задания конвейера есть два текстовых параметра: label
и version
с примером Jenkinsfile, который выглядит так:
node(this.label){
println this.version
}
Мое задание с несколькими конфигурациями имеет следующую конфигурацию:
- Пользовательская ось
version
со значениямиalpha beta gamma
и ведомая осьlabel
с выбранным node - Строка "Триггер/вызов строит на других проектах" для запуска моего задания на конвейер с предопределенными параметрами
version=${version}
иlabel=${label}
Эта настройка приводит к тому, что задание конвейера вызывается 3 раза (поскольку у меня есть только один node), каждый раз с другой версией и выполняющейся на моей указанной метке. Вот один из журналов:
[Pipeline] node
Running on master in /var/lib/jenkins/jobs/pipelinejob/workspace
[Pipeline] {
[Pipeline] echo
gamma
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Это решение работает, если вы хотите передавать только текстовые параметры или имена ярлыков. Это будет значительно сложнее использовать, если вы хотите сделать что-то вроде "build with different jdks". Я надеюсь, что это все же полезно.