我正在构建一个服务,用于创建将连接到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正确克隆了我需要的一切,我的工作变绿了。
如何解决我在网络共享中遇到的问题?或者,我如何满足以下要求:
如果有一个不需要网络共享的解决方案,我很乐意尝试其他方式!
答案 0 :(得分:0)
在这里找到解决方案: GIT pull error - remote object is corrupted
由于某种原因,当工作空间位于本地存储中时,默认的git配置值可以正常工作。当移动到任何外部映射的存储解决方案时,需要修改git配置以防止