繁体   English   中英

如何在 Jenkins 上从 SVN 进行稀疏结帐和更新?

[英]How to do a sparse checkout and update from SVN on Jenkins?

我们有一个大型 SVN 存储库,我想对 Jenkins 进行稀疏结帐。 我确实理解稀疏结账的概念,并且在本地拥有它我可以让事情按照我想要的方式工作。 然而,在 Jenkins 上做事并反复运行它我无法开始工作。

我有一个回购结构如下

trunk\file.txt
trunk\FolderA
trunk\FolderB
trunk\FolderC
trunk\FolderD

我想结帐和更新

trunk\file.txt
trunk\FolderA
trunk\FolderB

不是

trunk\FolderC
trunk\FolderD

我的管道代码如下

checkout([$class: 'SubversionSCM', 
    additionalCredentials: [[credentialsId: strCredentialsId, realm: strRealm]],
    excludedCommitMessages: '', 
    excludedRegions: '', 
    excludedRevprop: '', 
    excludedUsers: '', filterChangelog: false, 
    ignoreDirPropChanges: false, 
    includedRegions: '', 
    locations: [
        [
            remote: "${strRepoPath}/trunk",
            local: "${softwarePath}", 
            depthOption: 'unknown', 
            credentialsId: strCredentialsId,
            cancelProcessOnExternalsFail: true, 
            ignoreExternalsOption: false
        ],
        [
            remote: "${strRepoPath}/trunk/FolderA",
            local: "${softwarePath}/FolderA", 
            depthOption: 'infinity', 
            credentialsId: strCredentialsId, 
            cancelProcessOnExternalsFail: true, 
            ignoreExternalsOption: false
        ],
        [
            remote: "${strRepoPath}/trunk/FolderB",
            local: "${softwarePath}/FolderB", 
            depthOption: 'infinity', 
            credentialsId: strCredentialsId, 
            cancelProcessOnExternalsFail: true, 
            ignoreExternalsOption: false
        ]
    ],
    quietOperation: false, 
    workspaceUpdater: [$class: 'UpdateWithCleanUpdater']])

每当我第一次运行此代码时,一切都按预期进行。 但是,当 Jenkins 在以下时间运行它时, UpdateWithCleanUpdater会导致 FolderA 和 FolderB 首先被删除,然后再次签出。 结果仍然是正确的,但是,我希望它花费的时间更长,而且比必要的时间更长。

我想保留UpdateWithCleanUpdater,因为我希望 Jenkins 清理上次运行中生成的文件。

使用 Jenkins SVN 插件有什么解决方案吗? 我将如何“手动”执行此操作,即第一次进行结帐,清理并仅更新以下时间,并且仍然根据 SVN 存储库上的更改检测自动运行 Jenkins?

提前致谢!

现在是一个非常狭窄的问题。 我想说,要么你用手动脚本替换UpdateWithCleanUpdater (通过调用你的本地 svn 客户端; 这里有一些例子); 或者你可以 fork 或贡献给 Jenkins SVN 插件

trunk你有:

depthOption: 'unknown',

值不应该是'empty'吗?

然而,虽然这可能会避免“首先删除 FolderA 和 FolderB 然后再次签出”,但我怀疑您是否真的会以这种方式获得“稀疏签出”。 这将是“正常结帐到另一个 SVN 工作区”。

作为一种解决方法,您可以考虑使用svn:externals :创建一个文件夹trunk/JenkinsWorkspace/trunk ,并使用如下内容设置svn:externals属性:

 ^/trunk/FolderA FolderA
 ^/trunk/FolderB FolderB
 ^/trunk/file.txt file.txt

然后,在 Jenkins 中,您只需从${strRepoPath}/JenkinsWorkspace进行一次结帐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM