繁体   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