簡體   English   中英

Jenkins 管道:scm checkout 淺拷貝失敗

[英]Jenkins Pipeline: scm checkout shallow copy fails

我正在使用 Jenkins 文件來構建管道。 我正在嘗試使用如下 DSL 克隆參考存儲庫。

checkout(
[$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, 
extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]], 
submoduleCfg: [], 
userRemoteConfigs: [[url: 'git@bitbucket.org:user_team/infrastructure-as-code.git']])

當管道正在執行時,它正在被轉換成這個

git fetch --tags --progress git@bitbucket.org:userteam/infrastructure-as-code.git +refs/heads/*:refs/remotes/origin/* --depth=1

這會在我的 Jenkins 服務器上克隆整個存儲庫。 我只想獲得我的 repo 的淺拷貝,以便我可以從空間緊縮中拯救我的 Jenkins 服務器。 請在這里幫忙。

我正在使用:Jenkins 版本:2.58,

插件:

流水線 SCM 步驟:2.4

吉特:3.3.0

我認為您誤解了淺克隆的含義。
淺克隆仍將克隆整個存儲庫。
不同之處在於歷史將被截斷為指定的提交次數(在您的情況下為 1,因為您已經提到深度為 1。)它可以為您節省大量空間和時間。

有關更多信息,請點擊此鏈接: git-clone#Documentation

例如,請參見下圖,其中我克隆了同一個存儲庫 ( https://github.com/spring-cloud/spring-cloud-config.git ) 2 次,一次沒有深度,一次深度為 1。 在第一種情況下,本地存儲庫大小為 40 MB,而對於深度,本地存儲庫大小僅為 3.4 MB。

淺克隆

我建議檢查https://issues.jenkins-ci.org/browse/JENKINS-43878以獲得更好的理解。 這張票的報告者比較了3種情況下clone+checkout過程的持續時間:使用git命令的非淺克隆、使用管道的淺克隆和使用git命令的淺克隆(深度=1),並且票報告者抱怨的是這種情況#2持續時間比案例#3 長得多。

我使用 repo https://github.com/tesseract-ocr/tessdata (~5 GB) 進行了練習,但無法重現持續時間差異。 但我觀察到了很大的尺寸差異。 這些是我的測量結果:

  1. 帶管道的非淺層克隆:8 分鍾,總大小 4615 MB,“提取大小”3256 MB。
  2. 使用 git 命令的非淺層克隆:8 分鍾,總大小 4615 MB。
  3. 帶管道的淺克隆:4-5 分鍾,總大小 3121 MB,“提取大小”1762 MB
  4. 使用 git 命令進行淺克隆(深度=1):4-5 分鍾,總大小 1995 MB。

(我比較中的“fetch”大小是我在“git fetch”之后和“git checkout”之前用“du -ms”測量的目錄大小,當它在Jenkins管道的幫助下完成時)

如果比較案例 2 和案例 3,您會發現對於淺克隆,“fetch+checkout”方法比普通“clone”占用更多的磁盤空間。

管道維護人員同意這一事實,但以“不會修復”關閉了票證,因為他們不想由於其他原因將插件的工作方式從“獲取+結帳”更改為“克隆”。

這正是您問題的答案,為什么您看不到 Jenkins 管道的淺層克隆和完整克隆之間的巨大差異:因為 Jenkins 管道使用“獲取+結帳”方法,在 --depth 的情況下,該方法與“克隆”的工作方式不同並且下載更多數據比“克隆”。

如果您需要一個普通的“clone --depth”,它應該作為來自管道腳本的 shell 命令運行。 在我看來,這是 Jenkins 管道的一個缺點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM