当工作空间在网络共享上时,如何修复在git checkout上失败的Jenkins作业,但是当工作空间在本地驱动器上时却没有?

时间:2017-03-31 02:14:10

标签: git jenkins dynamic nas

我正在构建一个服务,用于创建将连接到Jenkins服务器的动态节点。这些节点主要用于构建许多大型代码库,因此我想利用增量构建。由于节点是临时虚拟机,在作业完成后的某个时间被破坏,我需要Jenkins工作区不是机器上的本地驱动器。

我创建了一个网络共享,并将Jenkins节点的根目录设置为I:\ jenkins。当VM联机时,我的服务执行将I驱动器映射到网络共享的命令。然后,该服务执行命令以将服务连接到Jenkins主服务器。当我尝试针对节点运行构建时,它在尝试git checkout时始终失败。

作业失败后,网络共享包含git存储库中的大部分文件,因此可以访问共享,并且没有读/写限制阻止作业运行。我尝试运行的任何作业都会发生此错误,包括使用极少数文件访问git repos的作业。

失败的Jenkins作业中的日志输出是:

git checkout -f ...a70f FATAL: Could not checkout ...a70f hudson.plugins.git.GitException: Could not checkout ...a70f ...<stack trace>... stderr: error: failed to read object ...f656 at offset ...1596 from .git/objects/pack/pack-...2475.pack fatal: packed object ...f656 (stored in .git/objects/pack/pack-...2475.pack) is corrupt

如果我将节点的工作区更改为本地驱动器并重新连接完全相同的计算机并重新运行完全相同的作业,我从未发现过失败。 Git正确克隆了我需要的一切,我的工作变绿了。

如何解决我在网络共享中遇到的问题?或者,我如何满足以下要求:

  • Jenkins节点必须在可能随时销毁和重新创建的临时虚拟机上运行
  • 工作区必须同时对多个VM可见(作业的严格工作区命名会阻止多个节点读取/写入相同的文件)
  • 即使没有联机Jenkins节点,工作区也必须保持
  • 任何联机的新节点都必须能够重新连接到工作区

如果有一个不需要网络共享的解决方案,我很乐意尝试其他方式!

1 个答案:

答案 0 :(得分:0)

在这里找到解决方案: GIT pull error - remote object is corrupted

由于某种原因,当工作空间位于本地存储中时,默认的git配置值可以正常工作。当移动到任何外部映射的存储解决方案时,需要修改git配置以防止