簡體   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