我正在使用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
答案 0 :(得分:2)
我认为您误会了浅克隆的含义。
浅克隆仍将克隆整个存储库。
不同之处在于,历史记录将被截断为指定的提交数量(在您的情况下为1,因为您提到的深度为1。 )它可以为您节省很多空间和时间。
有关更多信息,请点击以下链接: git-clone#Documentation
例如,请参见下图,其中我将同一存储库(https://github.com/spring-cloud/spring-cloud-config.git)克隆了2次,一次没有深度,而另一次则depth = 1。在第一种情况下,本地存储库大小为40 MB,纵深来看,本地存储库大小仅为3.4 MB。
答案 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)进行锻炼,无法重现持续时间的差异。但是我观察到了巨大的尺寸差异。这些是我的测量值:
(比较中的“ fetch”大小是我在“ git fetch”之后和“ git checkout”之前借助詹金斯完成时用“ du -ms”测量的目录的大小)管道)
如果比较案例2和案例3,您会发现对于浅层克隆,与普通的“克隆”相比,“获取+签出”方法会占用更多的磁盘空间。
管道维护者同意这个事实,但是用“ Wo n't fix”关闭了票证,因为他们不想由于以下原因而将插件的工作方式从“ fetch + checkout”更改为“ clone”其他原因。
这正是您的问题的答案,为什么您看不到Jenkins管道的浅克隆和完整克隆之间的巨大差异:因为Jenkins管道使用“提取+签出”方法,在--depth情况下,其工作方式与“ clone”不同并下载比“克隆”更多的数据。
如果需要常规的“ clone --depth”,则应将其作为管道脚本中的shell命令运行。我认为这是詹金斯管道的缺点。