groovy Jenkinsfile管道中的SparseCheckout

at0kjp5o  于 2023-04-19  发布在  Jenkins
关注(0)|答案(3)|浏览(238)

在一个jenkinsfile中,我已经通过SparseCheckoutPaths指定了要 checkout 的folderName。但是我得到的却是一个完整的分支 checkout 。

checkout([$class: 'GitSCM', 
       branches: [[name: '*/branchName']],
       extensions: [[$class: 'SparseCheckoutPaths', path: 'FolderName']],
       userRemoteConfigs: [[credentialsId: 'someID',
       url: 'git@link.git']]])
icomxhvb

icomxhvb1#

这里是我自己问题的答案。关于它是如何工作的背景知识,有一个名为sparsecheckout的git客户端标志/配置,它负责这种 checkout 。此外,还需要一个名为 sparse-checkout 的文件。有关更多信息,请查看here
我的问题是Jenkinsfile的语法,正确的语法如下:

checkout([$class: 'GitSCM', 
    branches: [[name: '*/branchName']],
    doGenerateSubmoduleConfigurations: false,
    extensions: [
        [$class: 'SparseCheckoutPaths',  sparseCheckoutPaths:[[$class:'SparseCheckoutPath', path:'folderName/']]]
                ],
    submoduleCfg: [],
    userRemoteConfigs: [[credentialsId: 'someID',
    url: 'git@link.git']]])

有关更多信息,请参阅github-link

jucafojl

jucafojl2#

您可以在一个共享库中定义一个自定义步骤sparseCheckout,该共享库添加到现有checkout scm之上。
vars/sparseCheckout.groovy

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', 'another/path/'])
ymdaylpp

ymdaylpp3#

您的语法看起来不错,但是,如“jenkinsci/plugins/gitclient/CliGitAPIImpl.java”中所示,您是否指定了正确的配置?

private void sparseCheckout(@NonNull List<String> paths) throws GitException, InterruptedException {

    boolean coreSparseCheckoutConfigEnable;
    try {
        coreSparseCheckoutConfigEnable = launchCommand("config", "core.sparsecheckout").contains("true");
    } catch (GitException ge) {
        coreSparseCheckoutConfigEnable = false;
    }

换句话说,git config core.sparsecheckout是否等于您要 checkout 的存储库中的true

相关问题