[英]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?
提前致谢!
在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.