Автоматический запуск кода конвейера 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 опция активирована), сборка будет запускаться каждый раз, когда вносится изменение в один из трех ваших репозиториев.

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

  1. Вам нужен Jenkinsfile в каждом хранилище
  2. Если вы зафиксировали более одного проекта между двумя SCM polls результат будет непредсказуемым (любой из двух проектов, в которых вы только что завершили работу, наконец-то будет создан), поэтому вам не следует зависеть от того, какой проект создается.
  3. Чтобы решить предыдущий вопрос, а также избежать дублирования кода, вам, вероятно, следует просто загрузить универсальный скрипт из каждого вашего 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...
    }
}
Другие вопросы по тегам