2016-10-24 51 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的另一个信用? –

相关问题