Когда мы начали использовать CI-сервер, мы создали все наши сборки как maven-задания. В связи с растущим числом рабочих мест и дополнительными требованиями к их выполнению, я написал небольшую библиотеку Jenkins Lib и превратил наши работы в конвейерные, чтобы все задания были одинаковыми с точки зрения настроек, шагов, и мы значительно сократили работу по обслуживанию.
Итак, наша установка выглядит следующим образом:
1) Jenkins Sharelib, который содержит конвейер и все шаги, вспомогательные классы и т. Д. c. для конвейера 2) Несколько рабочих мест, которые все определены как конвейерные работы. Они идентичны следующим образом:
- Они получают имя компонента и ветви для построения в качестве параметра.
- Задание опрашивает SCM каждые 10 минут, чтобы получить изменения SCM
- Задание состоит только из вызова конвейера (см. Изображение)
Сам конвейер принимает параметр, оценивает настройки компонента ( как repoURL), клонирует репо и начинает сборку maven.
stage('Initialisieren') {
// Parameter validation trimmed for readability
cleanWs()
komponente = KomponentenHelper.createKomponenteByParameter(paraKomponente)
log.trace 'Erzeuge JobHelper-Objekt'
jobHelper = new JobHelper(komponente)
stage('Checkout Sources') {
git(
branch: paraBranch,
credentialsId: jobHelper.gitCredentials,
url: jobHelper.getRepositoryURL()
)
}
stage('Build') {
// It's a definied pipeline step using "withMaven" and the components setting for JDK and Maven version
// in short its "maven clean install site" (and yeah I know about recommonend mvn verify)
mavenInstallSite(komponente)
}
Так что это наша установка, и она работает довольно хорошо, но меня смущает: 1) Каждый раз, когда происходит изменение SCM в репозитории компонентов, выполняется задание для этого репозитория / ветви. 2) Когда мы измените библиотеку, тогда все задания будут выполнены, потому что в репозитории libs произошла ошибка SCM.
Первое - это то, что мы хотим, но чего я не понимаю. Второе - это то, что я понимаю, но то, что мы не хотим.
Теперь мои вопросы:
a) Почему это работает (как хотелось) только после изменения SCM компонента только это работа выполнена? Откуда задание знает, что в хранилище есть изменение хранилища, которое не связано с хранилищем в его определении задания? б) Как я могу избежать этого, чтобы при изменении библиотеки (которая включает скрипт конвейера) выполнялись все обычные сборки? Я не хочу создавать файл конвейера внутри каждой причины хранилища по причинам обслуживания (тогда я мог бы остаться на заданиях maven)
Цель состоит в том, чтобы задания сборки выполнялись только тогда, когда хранилище компонентов получает изменение SCM на заданная ветвь.
Дополнительная информация (не знаю, связано ли это с этим): Описанные выше задания по сборке создаются конвейером внутри того же lib-репозитория с использованием jobDSL