我有一个很大的GitHub仓库,包含几个可独立构建的位。如果我为每个这样的工作(或两个)配置Jenkins,我最终不得不多次拉数千兆字节的数据(每个作业的一个repo克隆)。
这需要磁盘空间和带宽。
我想要做的是拥有克隆github一次的“刷新本地回购”作业,然后配置每个作业以从该回购克隆自己,并构建。然后通过将子作业设置为依赖构建,我可以运行“刷新本地存储库”,让它从GitHub中提取所有最新的东西,然后运行每个构建。
到目前为止,我已经有了“刷新本地回购” - 它成功克隆了,如果我去工作区,我看到它有HEAD提交的origin / master。
问题在于其他工作 - 这些工作似乎没有取得更新。以下是我如何配置其中一个:
Git
Repository URL file:////Users/malcolmbox/.jenkins/jobs/Refresh Local repo/workspace
Branches to build master
而不是更新到最新提交,而是过去几天都停留了。
如何才能获得提示并做正确的事情?
澄清:... /刷新本地回购/工作区已提交6b20268389064590147d5c73d2b6aceb6ba5fe70已提交28/3
运行构建后的依赖构建(大概是做一个git clone / pull步骤)被检查到提交26/3 - 所以它落后了几天。
答案 0 :(得分:30)
如果您打开作业配置并单击git SCM配置的“高级”按钮,您将看到一个指定“克隆期间要使用的引用回购路径(可选)”的位置。
如果您拥有存储库的本地克隆,请添加引用存储库字段的路径。
然后,Git将使用本地克隆并共享磁盘上的大多数git对象,并仅从github中提取本地克隆中缺少的内容,从而导致快速克隆并节省磁盘空间。或者这正是您如何配置您的工作并且它没有获取最新提交的?如果是这样,请提供更多详细信息。考虑发布您的工作配置。
答案 1 :(得分:2)
查看Clone Workspace plugin。您可以使用它或配置作业从Github更新本地存储库,然后从该本地存储库中取出所有其他作业。
这对工作空间仍然需要磁盘空间的问题没有帮助,但据我所知,没有简单的解决方案。您可以将构建步骤更改为工作区外的共享目录,但这很麻烦,可能会破坏其他内容。或者,您可以使用提供重复数据删除的文件系统。
答案 2 :(得分:0)
我有同样的经历。
我有一份工作来拉真正的远程仓库,即github。
每个其他工作(有很多)都有一个“存储库URL”,如下所示:
file:///C:/Program Files (x86)/Jenkins/jobs/webtest-local-repo/workspace/.git
它克隆很好,但随后的提取没有注意到任何变化。
同样的问题出现在gitbash中,所以我想这是一个git问题,而不是jenkins问题。
我的可怕的解决方法是在完成构建时让依赖作业删除其工作区,以便每个git操作都是“克隆”。这太荒谬了,但也许没有比在同一个github回购中肆无忌惮的工作更可笑。
ZOMG!这也不起作用,因为虽然git可以成功克隆回购,但jenkins会记住之前的版本并再次构建相同版本。也许它与this issue有关,我不知道,我很厌倦。我们放弃了,现在所有的工作再次调查github。也许我会得到一个钩子。
答案 3 :(得分:0)
$WORKSPACE/../ReferenceRepo/label/$NODE_NAME
,其中ReferenceRepo
是您在上面创建的作业的名称。您将需要在每台计算机上重新克隆每个作业,以使其生效。现在,他们应该将参考存储库中的数据用于所有可能的操作,从而节省构建节点上的磁盘空间和带宽。