2016-10-24 14 views
24

Używam wtyczki Jenkins Multiple SCM do sprawdzenia trzech repozytoriów git w trzech podkatalogach w mojej pracy Jenkinsa. Następnie wykonuję jeden zestaw poleceń, aby zbudować pojedynczy zestaw artefaktów z informacjami i kodem pobranym ze wszystkich trzech repozytoriów.Używanie potoku Jenkinsa do kasowania wielu repozytoriów git do tej samej pracy

Wiele SCM jest obecnie amortyzowanych, a tekst zaleca przejście do potoków. Próbowałem, ale nie mogę wymyślić, jak to działa.

Oto struktura katalogów Jestem ciekaw z górnego poziomu mojego Jenkins katalogu pracy:

$ ls 
Combination 
CombinationBuilder 
CombinationResults 

Każdy z tych trzech podkatalogów ma pojedynczy git repo wyrejestrowany. Używając Multiple SCM, użyłem git, a następnie dodałem zachowanie "checkout to a subdirectory". Oto moja próba z skryptu rurociągu:

node('ATLAS && Linux') { 
    sh('[ -e CalibrationResults ] || mkdir CalibrationResults') 
    sh('cd CalibrationResults') 
    git url: 'https://github.com/AtlasBID/CalibrationResults.git' 
    sh('cd ..') 
    sh('[ -e Combination ] || mkdir Combination') 
    sh('cd Combination') 
    git url: 'https://github.com/AtlasBID/Combination.git' 
    sh('cd ..') 
    sh('[ -e CombinationBuilder ] || mkdir CombinationBuilder') 
    sh('cd CombinationBuilder') 
    git url: 'https://github.com/AtlasBID/CombinationBuilder.git' 
    sh 'cd ..' 

    sh('ls') 
    sh('. CombinationBuilder/build.sh') 
} 

Jednak komenda git wydaje się wykonać w głównym katalogu obszaru roboczego (co sprawia, że ​​jakiś sens), a zgodnie ze składnią też nie robi wydaje się być zachowaniem kasowym do podkatalogu.

Odpowiedz

39

Można użyć komendy dir wykonać krok rurociągu w podkatalogu:

node('ATLAS && Linux') { 
    dir('CalibrationResults') { 
     git url: 'https://github.com/AtlasBID/CalibrationResults.git' 
    } 
    dir('Combination') { 
     git url: 'https://github.com/AtlasBID/Combination.git' 
    } 
    dir('CombinationBuilder') { 
     git url: 'https://github.com/AtlasBID/CombinationBuilder.git' 
    } 

    sh('ls') 
    sh('. CombinationBuilder/build.sh') 
} 
+2

doskonały, że wystarczyły, dzięki! Powoli uczę się rurociągów. Żałuję, że całe oprogramowanie nie zdecydowałoby się na jeden DSL za wykonanie pracy. Musiałem się wiele nauczyć. :-) – Gordon

+0

jak powrócić do katalogu $ WORKSPACE/the pipeline? Muszę powrócić do kontekstu globalnego, aby wykonać niektóre skrypty. Katalog przełącza kontekst i pozostawia go tam. Ostatnie polecenie "ls" wyświetli zawartość repozytorium CombinationBuilder. –

+0

Jak korzystać z różnych poświadczeń dla repo? Tzn. Moje "główne" repozytorium (które Jenkins monitoruje, aby uruchomić zadanie) mieszka w Bitbucket, i chcę sklonować istniejące repozytorium Githuba wewnątrz kompilacji, jak określić jeden zestaw kredytów dla Bitbucket i inne dla Github ? –