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