Jenkins Pipeline:scm检出浅层复制失败

时间:2019-02-12 08:19:47

标签: 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']])

并且在执行管道时,它正在被翻译为此

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

这会将整个存储库克隆到我的Jenkins服务器上。我只想获取我的仓库的浅表副本,以便可以节省空间来保护我的Jenkins服务器。 请在这里帮助。

我正在使用: 詹金斯版本:2.58,

插件:

管道SCM步骤:2.4

Git:3.3.0

2 个答案:

答案 0 :(得分:2)

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

有关更多信息,请点击以下链接: git-clone#Documentation

例如,请参见下图,其中我将同一存储库(https://github.com/spring-cloud/spring-cloud-config.git)克隆了2次,一次没有深度,而另一次则depth = 1。在第一种情况下,本地存储库大小为40 MB,纵深来看,本地存储库大小仅为3.4 MB。

shallow clone

答案 1 :(得分:0)

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

我使用了仓库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命令进行浅克隆(depth = 1):4-5分钟,总大小1995 MB。

(比较中的“ fetch”大小是我在“ git fetch”之后和“ git checkout”之前借助詹金斯完成时用“ du -ms”测量的目录的大小)管道)

如果比较案例2和案例3,您会发现对于浅层克隆,与普通的“克隆”相比,“获取+签出”方法会占用更多的磁盘空间。

管道维护者同意这个事实,但是用“ Wo n't fix”关闭了票证,因为他们不想由于以下原因而将插件的工作方式从“ fetch + checkout”更改为“ clone”其他原因。

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

如果需要常规的“ clone --depth”,则应将其作为管道脚本中的shell命令运行。我认为这是詹金斯管道的缺点。