2016-05-23 16 views
12

Używam wtyczki potoku Jenkinsa z plikiem Jenkinsfile.Jenkinsfile z dwoma repozytoriami git

W jednym repozytorium, o nazwie vms.git, mam plik Jenkinsfile i aplikację, którą buduje.

Mam inne repozytorium o nazwie deploy.git, które zawiera skrypty, których chcę użyć do wdrożenia aplikacji w vms.git.

W tej chwili moja Jenkinsfile właśnie wygląda ten

node { 
    stage 'build' 
    checkout scm 

i jestem definiowania repo vms.git w konfiguracji pracy.

To, co chciałbym zrobić, to sprawdzenie obu repozytoriów, a następnie użycie Jenkinsfile w vms.git do zdefiniowania reszty kompilacji. Chcę ponownie użyć skryptów deploy.git w innych potokach, więc nie chcę umieszczać tam pliku Jenkins.

Odpowiedz

23

Możesz pobrać wiele katalogów używając checkout, ale musisz podać katalog, w którym chcesz to zrobić. Możesz generować snippety przy użyciu Jennkins (pole skryptu generatora Wykreśleń). Wybierz kasy, następne repozytorium git i w Dodatkowe zachowania wybierz: checkout do podkatalogu.

Kiedy będziesz mieć 2 repozytoria, możesz załadować skrypt z repozytorium, które chcesz nam load. Przykład:

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' 
} 
+1

Znaczenie '*/master' jest dokładniej wyjaśnione w odniesieniu dsl Jenkinsfile w' http: // jenkinshost: 8080/Workflow-CPS-snippetizer/dslReference' –

14

Innym eleganckie rozwiązanie dla obsługi wielu magazynów Git wewnątrz pojedynczego potoku można znaleźć at this thread.

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