当工作区在网络共享上时,如何修复在 git 结帐时失败的 Jenkins 作业,但当工作区在本地驱动器上时却没有?
How to fix Jenkins job that is failing on git checkout when workspace is on network share, but not when workspace is on local drive?
我正在构建一个服务,该服务创建将连接到 Jenkins 服务器的动态节点。这些节点将主要用于构建许多大型代码库,因此我想利用增量构建。由于节点是临时虚拟机,在作业完成后的某个时间会被销毁,因此我需要 Jenkins 工作区不是机器上的本地驱动器。
我创建了一个网络共享,并将 Jenkins 节点的根目录设置为 I:\jenkins。当 VM 联机时,我的服务会执行一个命令,将 I 驱动器映射到网络共享。然后服务执行命令以将服务连接到 Jenkins 主服务器。当我尝试 运行 对节点进行构建时,它在尝试 git 结帐时始终失败。
作业失败后,网络共享拥有 git 存储库中的大部分文件,因此可以访问共享并且没有 read/write 限制阻止作业运行宁。我尝试 运行 的任何作业都会发生此错误,包括访问 git 文件很少的回购的作业。
失败的 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 可见(作业的严格工作区命名可防止多个节点 reading/writing 相同的文件)
- 即使没有在线的 Jenkins 节点,工作区也必须持续存在
- 任何联机的新节点都必须能够重新连接到工作区
如果有不需要网络共享的解决方案,我很乐意尝试其他方法!
在这里找到解决方案:
GIT pull error - remote object is corrupted
出于某种原因,默认的 git 配置值在工作区位于本地存储中时工作正常。当移动到任何外部映射存储解决方案时,需要修改 git 配置以防止
我正在构建一个服务,该服务创建将连接到 Jenkins 服务器的动态节点。这些节点将主要用于构建许多大型代码库,因此我想利用增量构建。由于节点是临时虚拟机,在作业完成后的某个时间会被销毁,因此我需要 Jenkins 工作区不是机器上的本地驱动器。
我创建了一个网络共享,并将 Jenkins 节点的根目录设置为 I:\jenkins。当 VM 联机时,我的服务会执行一个命令,将 I 驱动器映射到网络共享。然后服务执行命令以将服务连接到 Jenkins 主服务器。当我尝试 运行 对节点进行构建时,它在尝试 git 结帐时始终失败。
作业失败后,网络共享拥有 git 存储库中的大部分文件,因此可以访问共享并且没有 read/write 限制阻止作业运行宁。我尝试 运行 的任何作业都会发生此错误,包括访问 git 文件很少的回购的作业。
失败的 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 可见(作业的严格工作区命名可防止多个节点 reading/writing 相同的文件)
- 即使没有在线的 Jenkins 节点,工作区也必须持续存在
- 任何联机的新节点都必须能够重新连接到工作区
如果有不需要网络共享的解决方案,我很乐意尝试其他方法!
在这里找到解决方案: GIT pull error - remote object is corrupted
出于某种原因,默认的 git 配置值在工作区位于本地存储中时工作正常。当移动到任何外部映射存储解决方案时,需要修改 git 配置以防止