2016-05-23 30 views
12

Sto usando il plug-in della pipeline Jenkins con un Jenkinsfile.Jenkinsfile con due repository git

In un repository, chiamato vms.git, ho il Jenkinsfile e un'applicazione che costruisce.

Ho un altro repository chiamato deploy.git, che contiene script che voglio utilizzare per distribuire l'applicazione in vms.git.

Al momento il mio Jenkinsfile proprio assomiglia a questo

node { 
    stage 'build' 
    checkout scm 

e sto definendo la repo vms.git nella configurazione di lavoro.

Quindi quello che mi piacerebbe fare è controllare entrambi i repository, quindi utilizzare il file Jenkins in vms.git per definire il resto della build. Voglio riutilizzare gli script deploy.git in altre pipeline, quindi non voglio inserire un Jenkinsfile lì.

risposta

23

È possibile eseguire il checkout di più directory utilizzando checkout, ma è necessario specificare la directory in cui si desidera eseguire il checkout. È possibile generare snippet utilizzando jenkins (campo dello script del muggito del generatore Snippet). Scegliere il checkout, il successivo repository git e in Altri comportamenti scegliere: checkout nella sottodirectory.

Quando si avranno 2 repository, è possibile caricare lo script dal repository che si desidera utilizzare in load. Esempio:

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

Il significato di '*/master' è più completamente spiegata nel riferimento DSL Jenkinsfile a' http: // jenkinshost: 8080/workflow-cps-snippetizer/dslReference' –

14

Un'altra soluzione elegante per la gestione di più repository Git all'interno di un'unica conduttura può essere trovato 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') 
}