一尘不染

使用Jenkins管道将多个git repos签出到同一作业中

jenkins

我正在使用Jenkins Multiple
SCM插件将三个git存储库检出到Jenkins作业的三个子目录中。然后,我执行一组命令,以使用从所有三个存储库中提取的信息和代码构建一组工件。

现在已弃用多个SCM,并且文本建议移至管道。我尝试过,但是我不知道如何使它工作。

这是我感兴趣的从詹金斯工作目录的顶层看到的目录结构:

$ ls
Combination
CombinationBuilder
CombinationResults

这三个子目录中的每一个都有一个单独的git repo签出。对于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命令似乎在工作空间的顶级目录中执行(这在一定程度上是有意义的),并且根据语法,似乎也没有“ checkout-to-sub-子目录”行为。


阅读 263

收藏
2020-07-25

共1个答案

一尘不染

您可以使用以下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')
}
2020-07-25