如何从一个本地git仓库中获取多个Jenkins构建版本?

时间:2012-03-28 19:52:54

标签: git jenkins

我有一个很大的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 - 所以它落后了几天。

4 个答案:

答案 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)

  1. 创建一个多配置Jenkins作业,该作业仅签出您的存储库并定期构建。不必在每次提交时都进行构建,因为如果其他存储库在此存储库中找不到它们,则其他存储库将自动从实际远程中提取所有更改。
  2. 打开配置矩阵的“标签”部分,然后分别检查每个构建节点。
  3. 在其他作业上,单击git SCM配置的“高级”按钮,然后找到“克隆期间要使用的参考仓库的路径(可选)”。输入$WORKSPACE/../ReferenceRepo/label/$NODE_NAME,其中ReferenceRepo是您在上面创建的作业的名称。

您将需要在每台计算机上重新克隆每个作业,以使其生效。现在,他们应该将参考存储库中的数据用于所有可能的操作,从而节省构建节点上的磁盘空间和带宽。