Jenkinsfile с двумя репозиториями git

Я использую плагин конвейера Jenkins с файлом Jenkins.

В одном репозитории, называемом vms.git, у меня есть файл Jenkins и приложение, которое он создает.

У меня есть еще один репозиторий под названием deploy.git, содержащий сценарии, которые я хочу использовать для развертывания приложения в vms.git.

На данный момент мой Jenkinsfile выглядит так

node {
  stage 'build'
  checkout scm

и я определяю репозиторий vms.git в конфигурации задания.

Итак, что я хотел бы сделать, это проверить оба репозитория, а затем использовать Jenkinsfile в vms.git для определения остальной части сборки. Я хочу повторно использовать сценарии deploy.git в других конвейерах, поэтому не хочу помещать туда Jenkinsfile.


person Mark Chorley    schedule 23.05.2016    source источник


Ответы (2)


Вы можете проверить несколько каталогов, используя checkout, но вы должны указать каталог, в котором вы хотите оформить это. Вы можете генерировать сниппеты, используя jenkins (генератор сниппетов в поле скрипта). Выберите checkout, следующий репозиторий git и в Additional Behaviors выберите: checkout into sub directory.

Когда у вас будет 2 репозитория, вы можете загрузить скрипт из репозитория, который хотите использовать load. Пример:

node {
    // first repository
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'subdirectory1']], submoduleCfg: [], userRemoteConfigs: [[url: 'repo1.git']]])
    // second repository
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'subdirectory2']], submoduleCfg: [], userRemoteConfigs: [[url: 'repo2.git']]])
    // run first script
    load 'subdirectory1/Jenkinsfile'
    // run second script
    load 'subdirectory2/Jenkinsfile'
}
person krynio    schedule 23.05.2016
comment
Значение */master более полно объяснено в справочнике по dsl Jenkinsfile на http://jenkinshost:8080/workflow-cps-snippetizer/dslReference - person Linus Arver; 04.06.2016

Еще одно элегантное решение для работы с несколькими репозиториями Git в одном конвейере можно найти в этой ветке.

node {
    dir('RepoOne') {
        git url: 'https://github.com/somewhere/RepoOne.git'
    }
    dir('RepoTwo') {
        git url: 'https://github.com/somewhere/RepoTwo.git'
    }

    sh('. RepoOne/build.sh')
    sh('. RepoTwo/build.sh')
}
person czerwin    schedule 27.03.2017
comment
Если github.com/somewhere/RepoOne.git защищен, как передать учетные данные в URL команды git: 'github.com/somewhere/RepoOne.git'? - person demonicdaron; 09.07.2018
comment
Я предлагаю вам использовать учетные данные Jenkins и передавать их следующим образом: git url: 'https://github.com/somewhere/RepoOne.git', credentialsId: 'xxxxx-xxxx-xxxx-xxxx-xxxxx' - person czerwin; 30.07.2018