Jenkins 管道:scm checkout 浅拷贝失败

Abh*_*dha 5 git jenkins shallow-clone

我正在使用 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']])
Run Code Online (Sandbox Code Playgroud)

当管道正在执行时,它正在被转换成这个

git fetch --tags --progress git@bitbucket.org:userteam/infrastructure-as-code.git +refs/heads/*:refs/remotes/origin/* --depth=1
Run Code Online (Sandbox Code Playgroud)

这会在我的 Jenkins 服务器上克隆整个存储库。我只想获得我的 repo 的浅拷贝,以便我可以从空间紧缩中拯救我的 Jenkins 服务器。请在这里帮忙。

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

插件:

流水线 SCM 步骤:2.4

吉特:3.3.0

Swa*_* Kp 9

我认为您误解了浅克隆的含义。
浅克隆仍将克隆整个存储库。
不同之处在于历史记录将被截断为指定的提交次数(在您的情况下为 1,因为您提到深度为 1)。它可以为您节省大量空间和时间。

欲了解更多信息,请点击此链接: git-clone#Documentation

例如,请参见下图,我将同一存储库 ( https://github.com/spring-cloud/spring-cloud-config.git ) 克隆两次,一次没有深度,一次深度=1。在第一种情况下,本地存储库大小为 40 MB,而随着深度的增加,本地存储库大小仅为 3.4 MB。

浅克隆


Ale*_*lov 5

我建议检查https://issues.jenkins-ci.org/browse/JENKINS-43878以更好地理解。该票证的记者比较了 3 种情况下克隆+签出过程的持续时间:使用 git 命令的非浅克隆、使用管道的浅克隆和使用 git 命令的浅克隆(深度=1),票证报告者抱怨情况 #2持续时间比情况 #3 长得多。

我使用存储库https://github.com/tesseract-ocr/tessdata(~5 GB)进行了练习,但无法重现持续时间差异。但我观察到了巨大的尺寸差异。这些是我的测量结果:

  1. 带管道的完整克隆:8 分钟,总大小 4615 MB,“获取大小”3256 MB。
  2. 使用“git clone”进行完整克隆:8 分钟,总大小 4615 MB。
  3. 带管道的浅克隆(深度=1):4-5 分钟,总大小 3121 MB,“获取大小”1762 MB
  4. 使用“git clone”进行浅克隆(深度=1):4-5 分钟,总大小 1995 MB。

(我比较中的“fetch”大小是我在“git fetch”之后和“git checkout”之前在 Jenkins 管道的帮助下使用“du -ms”测量的目录的大小)

如果比较情况 3 和 4,您会发现,对于浅克隆,管道(即“fetch+checkout”)方法会比普通“克隆”占用更多的磁盘空间。

管道维护者同意这一事实,但以“不会修复”关闭了票证,因为他们不想由于其他原因将插件的工作方式从“获取+签出”更改为“克隆”。

这正是您问题的答案,为什么您看不到 Jenkins 管道的浅层克隆和完整克隆之间的巨大差异:因为 Jenkins 管道使用“获取+签出”方法,在 --深度 的情况下,其工作方式与“克隆”不同,并且下载更多数据比“克隆”。

如果您需要普通的“clone --depth”,则应将其作为管道脚本中的 shell 命令运行。在我看来,这是 Jenkins 管道的一个缺点。