我花了很长时间才了解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/