Автоматический запуск кода конвейера Jenkins с несколькими репозиториями через подключаемый модуль папки организации GitHub

Этот вопрос связан с автоматическим запуском задания 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?


person Nitin    schedule 08.08.2016    source источник


Ответы (1)


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

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

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

Еще несколько советов по поводу этого решения:

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

Файл Jenkins в 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...
    }
}
person Pom12    schedule 10.08.2016
comment
Похоже, в моем случае это невозможно. Не хочу поддерживать несколько файлов Jenkins. Задание конвейера не позволяет получить имя текущей ветки с помощью $ {env.BRANCH_NAME}. Таким образом, это просто создание одной работы, и я ищу 3 рабочих места Dev, Stage, Prod в соответствии с названием ветки. Просто сохраняя код ниже в common-pipeline.groovy, дающий ошибку. ‹Pre› узел (подчиненный) {sh git clone github / test.git sh git clone github / hello.git sh ls -la} ‹/pre› java.lang.NullPointerException: невозможно вызвать метод call () для нулевого объекта в org .codehaus.groovy.runtime.NullObject.invokeMethod (NullObject.java:77) - person Nitin; 11.08.2016
comment
Jenkins job auto trigger with multiple repositories: как это ни разу не работа ?? В противном случае вы не можете использовать ${env.BRANCH_NAME}, в документации указано, что это только для многоотраслевых проектов. Однако вы все равно можете получить его с помощью небольшого сценария sh, например sh "echo 'gitBranch=\$(git branch | cut -d ' ' -f 2)' >> properties.txt". По последней проблеме задайте другой вопрос, потому что ваша проблема не связана с исходной проблемой и не имеет контекста. - person Pom12; 11.08.2016
comment
Спасибо за ваш вклад, но в моем случае это не сработает, и я не могу перейти к работе с конвейером. Все работает нормально с подключаемым модулем папки организации GitHub, кроме опроса SCM для нескольких репозиториев. - person Nitin; 11.08.2016
comment
Как насчет случая, когда мне нужно создавать разные ветки для каждого репо? - person pantonis; 05.01.2017