2016-05-23 96 views
12

我使用Jenkins管道插件和Jenkinsfile。Jenkinsfile與兩個git存儲庫

在一個名爲vms.git的倉庫中,我有Jenkinsfile和它構建的應用程序。

我有另一個名爲deploy.git的存儲庫,其中包含我想用於在vms.git中部署應用程序的腳本。

此刻我Jenkinsfile只是看起來像這樣

node { 
    stage 'build' 
    checkout scm 

和我定義的作業配置的vms.git回購。

所以我想要做的是檢查這兩個存儲庫,然後使用vms.git中的Jenkinsfile來定義構建的其餘部分。我想在其他管道中重用deploy.git腳本,所以我不想在其中放置Jenkinsfile。

回答

23

您可以使用checkout檢出多個目錄,但是您必須指定要檢出的目錄。你可以使用jenkins生成片段(Snippet generator bellow script field)。 選擇結帳,下一個git存儲庫,並在其他行爲選擇:結帳到子目錄。

當您將有2個存儲庫時,您可以從您想要使用的存儲庫加載腳本load。示例:

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

的'*/master'的被更充分地在Jenkinsfile DSL參考在'HTTP說明的含義:// jenkinshost:8080 /工作流程的CPS-snippetizer/dslReference' –

14

另一個在單個管道中處理多個Git存儲庫的優雅解決方案可以在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') 
}