我们有一个庞大的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?
谢谢!
答案 0 :(得分: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
进行一次结帐。
答案 1 :(得分:0)
现在那是一个非常狭窄的问题。 我会说,要么用手动脚本替换 UpdateWithCleanUpdater (通过调用本地svn客户端;一些示例here);或者您可以为Jenkins SVN plugin分叉或贡献力量。