我花了很长时间才了解checkout scm在Jenkinsfile中的真正含义(顺便说一下,checkout是一个函数,而scm是默认的全局变量)。

现在,我已经了解了这一点,例如,我想增加scm来增加特定结帐的超时时间或设置sparseCheckoutPaths。这可能吗?如果是这样,怎么办?

最佳答案

对于Git,checkout scm基本上等效于:

checkout([
     $class: 'GitSCM',
     branches: scm.branches,
     doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
     extensions: scm.extensions,
     userRemoteConfigs: scm.userRemoteConfigs
])

如果要向现有的scm添加稀疏 checkout ,则需要执行以下操作:
checkout([
     $class: 'GitSCM',
     branches: scm.branches,
     doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
     extensions: scm.extensions + [$class: 'SparseCheckoutPaths',  sparseCheckoutPaths:[[$class:'SparseCheckoutPath', path:'path/to/file.xml']]],
     userRemoteConfigs: scm.userRemoteConfigs
])

更好的是,您可以在共享库中定义自定义步骤sparseCheckout
def call(scm, files) {
    if (scm.class.simpleName == 'GitSCM') {
        def filesAsPaths = files.collect {
            [path: it]
        }

        return checkout([$class                           : 'GitSCM',
                         branches                         : scm.branches,
                         doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
                         extensions                       : scm.extensions +
                                 [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: filesAsPaths]],
                         submoduleCfg                     : scm.submoduleCfg,
                         userRemoteConfigs                : scm.userRemoteConfigs
        ])
    } else {
        // fallback to checkout everything by default
        return checkout(scm)
    }
}

然后用以下命令调用它:
sparseCheckout(scm, ['path/to/file.xml'])

关于jenkins - 我可以在Jenkinsfile中增加scm吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46004884/

10-12 23:46