4

我们有一个大型 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?

提前致谢!

4

2 回答 2

2

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

于 2019-05-06T08:54:00.573 回答
1

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.

于 2021-03-08T09:58:59.273 回答