Как выполнить конвейер jenkins только при изменении репозитория, клонированного внутри задания - PullRequest
0 голосов
/ 21 марта 2020

Когда мы начали использовать CI-сервер, мы создали все наши сборки как maven-задания. В связи с растущим числом рабочих мест и дополнительными требованиями к их выполнению, я написал небольшую библиотеку Jenkins Lib и превратил наши работы в конвейерные, чтобы все задания были одинаковыми с точки зрения настроек, шагов, и мы значительно сократили работу по обслуживанию.

Итак, наша установка выглядит следующим образом:

1) Jenkins Sharelib, который содержит конвейер и все шаги, вспомогательные классы и т. Д. c. для конвейера 2) Несколько рабочих мест, которые все определены как конвейерные работы. Они идентичны следующим образом:

  • Они получают имя компонента и ветви для построения в качестве параметра.
  • Задание опрашивает SCM каждые 10 минут, чтобы получить изменения SCM
  • Задание состоит только из вызова конвейера (см. Изображение)

jobSetup

Сам конвейер принимает параметр, оценивает настройки компонента ( как 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

...