2016-05-23 13 views
12

Ich benutze das Jenkins-Pipeline-Plugin mit einem Jenkinsfile.Jenkinsfile mit zwei Git-Repositories

In einem Repository, genannt vms.git, habe ich die Jenkinsfile und eine Anwendung, die es erstellt.

Ich habe ein anderes Repository namens deploy.git, das Skripts enthält, die ich verwenden möchte, um die Anwendung in vms.git zu implementieren.

Im Moment mein Jenkinsfile sieht genauso aus wie diese

node { 
    stage 'build' 
    checkout scm 

und ich bin die Definition der vms.git Repo in der Job-Konfiguration.

Also, was ich tun möchte, ist beide Repositories auschecken, dann verwenden Sie die Jenkinsfile in vms.git, um den Rest des Builds zu definieren. Ich möchte die deploy.git-Skripte in anderen Pipelines wiederverwenden, also möchte ich keine Jenkins-Datei dort hineinlegen.

Antwort

23

Sie können mehrere Verzeichnisse mit checkout auschecken, aber Sie müssen Verzeichnis angeben, wo Sie dies überprüfen möchten. Sie können Snippets mithilfe von jenkins (Snippet-Generator unterhalb des Skriptfelds) generieren. Wählen Sie checkout, next git repository und in Additional Behaviors wählen Sie: checkout in das Unterverzeichnis.

Wenn Sie 2 Repositories haben, können Sie das Skript aus dem Repository laden, das Sie verwenden möchten load. Beispiel:

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

Die Bedeutung von '*/master' mehr vollständig in der Jenkinsfile dsl Bezug auf' http erklärt: // jenkinshost: 8080/Workflow-cps-snippetizer/dslReference' –

14

Eine weitere elegante Lösung für mehr Git-Repositories innerhalb einzelner Pipeline Handhabung kann at this thread gefunden werden.

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