2016-10-24 3 views
24

Ich verwende das Jenkins Multiple SCM-Plugin, um drei Git-Repositories in drei Unterverzeichnisse in meinem Jenkins-Job auszuprobieren. Ich führe dann einen Befehlssatz aus, um einen einzigen Satz von Artefakten mit Informationen und Code aus allen drei Repositories zu erstellen.Verwenden einer Jenkins-Pipeline zum Auschecken mehrerer Git-Repos in denselben Job

Mehrere SCM wird jetzt abgeschrieben, und der Text empfiehlt, in Pipelines zu verschieben. Ich habe es versucht, aber ich kann nicht herausfinden, wie es funktioniert.

Hier ist die Verzeichnisstruktur I von der obersten Ebene interessiert bin meiner Jenkins Job-Verzeichnis zu sehen:

$ ls 
Combination 
CombinationBuilder 
CombinationResults 

Jede dieser drei Unterverzeichnisse hat einen einzigen git Repo ausgecheckt. Mit dem Multiple SCM habe ich git verwendet und dann das Verhalten "checkout to a subdirectory" hinzugefügt. Hier war mein Versuch mit einem Pipeline-Skript:

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

jedoch der git Befehl scheint auf dem obersten Ebene Verzeichnis des Arbeitsbereiches (das etwas Sinn macht) auszuführen, und entsprechend die Syntax auch tut es nicht scheinen das Checkout-zu-Unterverzeichnis-Verhalten zu sein.

Antwort

39

Sie können über den Befehl dir eine Pipeline Schritt in einem Unterverzeichnis auszuführen:

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

Perfect, dass der Trick, danke! Ich lerne langsam die Pipelines. Ich wünschte, die gesamte Software würde sich nur für einen DSL-Workflow entscheiden. Ich musste so viele lernen. :-) – Gordon

+0

Wie gehst du zurück zum $ WORKSPACE-Verzeichnis/zum Pipeline-Verzeichnis? Ich muss zum globalen Kontext zurückkehren, um einige Skripte auszuführen. Das Verzeichnis wechselt den Kontext und belässt es dort. Der letzte 'ls'-Befehl würde den Inhalt des CombinationBuilder-Repos drucken. –

+0

Wie verwenden Sie unterschiedliche Anmeldeinformationen für die Repos? Das heißt, mein "Haupt" Repo (Jenkins überwacht den Job auszulösen) lebt in Bitbucket, und ich möchte ein existierendes Github Repo innerhalb des Builds klonen. Wie lege ich einen Satz Credits für Bitbucket und einen anderen für Github fest ? –

Verwandte Themen