TL; DR Есть ли способ импортировать код в Jenkinsfile
из локального репозитория (кроме шага load
)?
Зачем?
Я Jenkinsfile
что для сложных сборок Jenkinsfile
становится громоздким и не очень Jenkinsfile
обслуживаемым.
Теперь, когда заданием на сборку является код, было бы замечательно иметь те же средства, что и для другого кода. То есть я хотел бы разделить его на более мелкие (более обслуживаемые) блоки и провести их модульное тестирование.
Что я пробовал
- разделяемые библиотеки: позволяют разделить нашу логику Jenkins Pipeline на меньшие файлы в отдельном модуле и даже выполнить ее модульное тестирование.
Однако они должны находиться в другом хранилище и (если не на GitHub) должны быть настроены в Jenkins. - Шаг
load
: разрешить загрузку скриптов Groovy из репозитория.
Однако файлы должны быть сценариями, а не "полными" классами Groovy, что затрудняет создание нескольких файлов или классов, которые зависят друг от друга. Например наследование невозможно.
Кроме того, эти файлы не отображаются при воспроизведении задания Jenkins, что затрудняет их разработку и отладку.
Мои вопросы
- Есть ли способ (или обходной путь) создать общую библиотеку в том же хранилище, что и
Jenkinsfile
и импортировать эту библиотеку вJenkinsfile
? - Или есть еще какой-то способ, которым я еще не пробовал?
Пример структуры каталогов
Подобно структуре каталогов, описанной для разделяемых библиотек, я бы хотел, чтобы в одном репозитории было следующее.
(root)
+- someModule
| +- ...
+- jenkins # Classes/Scripts used by Jenkins in a separate module
| +- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
| +- test # Groovy test files
| +- org
| +- foo
| +- BarTest.groovy # Test for org.foo.Bar class
| +- pom.xml or build.groovy # Build for local library
+- Jenkinsfile # Build "someModule", uses classes from "jenkins" module