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

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

Определены 3 репо для оформления заказа в Jenkinsfile.

 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}
 }

Настроил работу Jenkins с помощью организационного плагина Github.

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

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

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

Нужно ли мне определять "checkout scm" по-другому в Jenkinsfile?

Ответы на вопрос(1)

Решение Вопроса

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

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

Еще несколько советов об этом решении:

Тебе нужноa Jenkinsfile в каждом хранилищеЕсли вы зафиксировали более одного проекта между двумяSCM polls результат будет непредсказуемым (любой из двух проектов, в которых вы только что завершили работу, наконец-то будет создан), поэтому вам следуетне зависит от того, какой проект будет построен.Чтобы решить предыдущий вопрос, а также избежать дублирования кода, вам, вероятно, следует просто загрузить универсальный скрипт из каждого вашего Jenkinsfile, например: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 сценарий:
{ ->
    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...
    }
}
 pantonis04 янв. 2017 г., 22:19
Как насчет случая, когда мне нужно создать разные ветви для каждого репо?
 Nitin11 авг. 2016 г., 13:17
Спасибо за ваш вклад, но в моем случае это не сработает, и я не могу перейти к конвейерной работе. С «плагином GitHub Organization Folder Plugin» все работает отлично, за исключением опроса SCM для нескольких репо.
 Pom1211 авг. 2016 г., 12:58
Jenkins job auto trigger with multiple repositories : как это не единственная работа ?? В противном случае, вы не можете использовать${env.BRANCH_NAME}В документации указано, что это только для многоотраслевых проектов. Однако вы все равно можете получить его с помощью небольшого скрипта, такого какsh "echo 'gitBranch=\$(git branch | cut -d ' ' -f 2)' >> properties.txt", Для вашей последней проблемы, пожалуйста, задайте другой вопрос, потому что ваша проблема не связана с вашей первоначальной проблемой и не имеет контекста.
 Nitin11 авг. 2016 г., 12:33
Похоже, не осуществимо в моем случае. Не хочу поддерживать несколько файлов Jenkinsfiles. Конвейерное задание не позволяет получить текущее имя ветки с $ {env.BRANCH_NAME}. Таким образом, это просто создание одной работы, и я ищу 3 вакансии Dev, Stage, Prod в соответствии с названием филиала. Просто соблюдая приведенный ниже код в common-pipeline.groovy, выдает ошибку. <pre> node ("slave") {sh "git clone github / test.git" sh "git clone github / hello.git" sh "ls -la"} </ pre> java.lang.NullPointerException: невозможно вызвать метод вызов () для нулевого объекта в org.codehaus.groovy.runtime.NullObject.invokeMethod (NullObject.java:77)

Ваш ответ на вопрос