Автоматический триггер кода конвейера Jenkins с несколькими хранилищами через GitHub Organization Folder Plugin

Этот вопрос связан с автоматическим триггером задания Jenkins с несколькими репозиториями.

Определено 3 репо для проверки в файле Jenkins.

 node('slave'){
 git clone github.com/owner/abc.git -b ${env.BRANCH_NAME}
 git clone github.com/owner/def.git -b ${env.BRANCH_NAME}
 git clone github.com/owner/ghi.git -b ${env.BRANCH_NAME}
 }

Конфигурированное задание Дженкинса с использованием плагина организации Github.

В этом случае мой Jenkinsfile находится в abc-репо, а триггер Jenkins работает нормально для abc-репо. он не работает для других репо.

Есть ли способ определить автоматический триггер для 2 или более операций репо?

Есть ли какой-либо плагин, который может автоматически запускать задание для 2 или более хранилищ?

Мне нужно определить "checkout scm" по-другому в файле Jenkins?

Ответ 1

Да, вы можете сделать это с помощью параметра Pipeline script from SCM в задании конвейера, указав несколько репозиториев (нажмите кнопку Add Repository), предположив, что вы можете наблюдать за той же ветвью для ваших 3-х репозиториев, что, кажется, ваше дело.

введите описание изображения здесь

С этой конфигурацией (и, конечно, опция Poll SCM активирована), сборка будет запускаться каждый раз, когда будет внесено изменение в один из трех ваших репозиториев.

Несколько советов по этому решению:

  • Вам нужно a Jenkinsfile в каждом репозитории
  • Если вы совершили более одного проекта между двумя SCM polls, результат будет непредсказуемым (либо один из двух проектов, которые вы только что зафиксировали, может, наконец, построить), поэтому вы должны не зависеть от того, какой проект будет построен.
  • Чтобы решить предыдущую точку, а также избежать дублирования кода, вы должны просто загрузить общий script из каждого вашего файла Jenkins, например:

Jenkinsfile в abc/def/ghi:

node {
    // --- Load the generic pipeline ---
    checkout scm: [$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'http://github/owner/pipeline-repo.git']]]
    load 'common-pipeline.groovy'
}()

common-pipeline.groovy script:

{ ->
    node() {
       git clone github.com/owner/abc.git
       git clone github.com/owner/def.git
       git clone github.com/owner/ghi.git            

       // Whatever you do with your 3 repos...
    }
}