2016-10-24 52 views
24

我使用Jenkins Multiple SCM插件檢查出三個git存儲庫到我的Jenkins作業中的三個子目錄。然後我執行一組命令來構建一組包含來自所有三個存儲庫的信息和代碼的工件。使用Jenkins管道簽出多個git回購到相同的工作

現在多個SCM折舊,文本建議轉移到管道。我嘗試過,但我無法弄清楚如何使它工作。

這裏是目錄結構我很感興趣,從我詹金斯作業目錄的頂層看到:

$ ls 
Combination 
CombinationBuilder 
CombinationResults 

每個這三個子目錄中有一個單一的git回購簽出。使用Multiple SCM,我使用了git,然後將「簽出到子目錄」行爲。這是我嘗試用一​​條管道將腳本:

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

然而,git的命令似乎在工作區(這是有道理的)的頂級目錄執行,並根據語法也有不似乎是結帳到子目錄的行爲。

回答

39

可以使用dir命令在一個子目錄執行管線步:

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

完全,並獲得成功,謝謝!我正在慢慢學習管道。我希望所有的軟件都會決定使用一個DSL來完成工作流程。我必須學習這麼多。 :-) – Gordon

+0

你如何回到$ WORKSPACE目錄/ pipeline目錄?我必須返回到全局上下文來執行一些腳本。 dir切換上下文並將其保留在那裏。最後的'ls'命令將打印CombinationBuilder回購的內容。 –

+0

您如何使用不同的憑證進行回購?也就是說我的「主要」回購(即Jenkins正在監控以觸發這項工作)住在Bitbucket中,並且我想克隆構建中的現有Github回購,我如何爲Bitbucket指定一組信用和用於Github的另一個信用? –

相關問題