Jenkins Git插件在执行'git rev-list'时停顿了

6
在Windows Server 2012从机上运行Jenkins,任务成功从Bitbucket获取数据,该仓库位于防火墙内部。其最后一个任务是在刚检查出来的更改上执行“git rev-list”命令。这个命令需要大约8分钟才能完成。这是可重复的;这是一个相对较新的环境,我没有历史记录来查看是否是刚开始的问题。
在我们的生产环境中,Jenkins本身在Windows上运行而没有从机(已经有2年了),同样的rev-list命令只需要3秒钟就能完成。
我已经看到了几个关于“git fetch挂起”的参考资料,但对我来说不是fetch挂起 - 鉴于项目的大小,它在合理的时间内完成了。
时间戳日志如下。
00:00:00.001 Started by user #####
00:00:00.002 Building remotely on JS-W-01 (msvs ishield win) in workspace c:\jenkins\workspace\MyProject\2.7.11_nightly@2
00:00:00.015 [TemplateProject] Using SCM from: MyProject � 2.7.11_Template
00:00:00.044 Cloning the remote Git repository
00:00:00.049 Cloning repository ssh://vdn-bitbucket:7999/myprojectcore.git
00:00:00.052  > git init c:\jenkins\workspace\MyProject\2.7.11_nightly@2 # timeout=10
00:00:00.153 Fetching upstream changes from ssh://vdn-bitbucket:7999/myprojectcore.git
00:00:00.154  > git --version # timeout=10
00:00:00.200 using GIT_SSH to set credentials Jenkins Builder vdnbuild-bb SSH access key
00:00:00.210  > git fetch --tags --progress ssh://vdn-bitbucket:7999/myprojectcore.git +refs/heads/*:refs/remotes/origin/*
00:00:22.857  > git config remote.origin.url ssh://vdn-bitbucket:7999/myprojectcore.git # timeout=10
00:00:22.911  > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
00:00:22.967  > git config remote.origin.url ssh://vdn-bitbucket:7999/myprojectcore.git # timeout=10
00:00:23.023 Fetching upstream changes from ssh://vdn-bitbucket:7999/myprojectcore.git
00:00:23.023 using GIT_SSH to set credentials Jenkins Builder vdnbuild-bb SSH access key
00:00:23.028  > git fetch --tags --progress ssh://vdn-bitbucket:7999/myprojectcore.git +refs/heads/*:refs/remotes/origin/*
00:00:23.641  > git rev-parse "refs/remotes/origin/release/2.7.11^{commit}" # timeout=10
00:00:23.697  > git rev-parse "refs/remotes/origin/origin/release/2.7.11^{commit}" # timeout=10
00:00:23.748 Checking out Revision fb773fc64875f5d457bc255088fcec4df3028216 (refs/remotes/origin/release/2.7.11)
00:00:23.752  > git config core.sparsecheckout # timeout=10
00:00:23.799  > git checkout -f fb773fc64875f5d457bc255088fcec4df3028216
00:02:21.725 Commit message: "Merge pull request #30 in MYPROJECT/core from bugfix/MYPROJECT-19 to release/2.7.11"
00:02:21.730  > git rev-list fb773fc64875f5d457bc255088fcec4df3028216 # timeout=10
00:10:50.813 [TemplateProject] Starting builders from: MyProject � 2.7.11_Template
00:10:50.827 [2.7.11_nightly@2] $ cmd /c call C:\Windows\TEMP\jenkins7743297501210902154.bat
00:10:50.853 

执行环境:

  • Jenkins 2.86 运行在 Centos 7 上;Git 插件版本为 3.6.2(也出现在3.6.0)

  • 从机运行于 Windows Server 2012 R2 Standard,slave.jar 版本为 3.7。

  • Git 版本为 2.14.3(也出现在 2.10.0)


尝试将停滞的Jenkins连接到实验室外的我的“旧”Bitbucket,将我的“旧”Jenkins连接到实验室内的“新”Bitbucket。问题仍然存在于停滞的Jenkins上-也就是说,从哪里连接Slave似乎并不重要,它都会停滞。通过SSH连接; stall可能是由于证书验证到达我们网络之外而引起的-这可能会被阻止。如果是这种情况,我会预期早期的Git命令也会停滞。无论如何,怀疑问题在于Jenkins Git插件在Jenkins Slaves上执行。 - John Elion
(可能是本地配置问题;我不认为这是插件的错误。) - John Elion
我在从机上本地安装了Jenkins,并配置了相同的任务。当任务通过Jenkins主节点运行时,延迟问题并未发生。只有当任务在Jenkins从节点上运行时才会出现。我认为这排除了网络或Jenkins配置的可能性,表明这是一个软件错误。 - John Elion
我还确认在从机器上的命令窗口(甚至在at作业中)运行命令“git rev-list <commit>”会立即完成。 - John Elion
2个回答

1
除了确保一切都更新(Jenkins或Git),你似乎没有网络/防火墙问题,因为检出部分完成得相当快。
如果git rev-list仍然很慢,这个命令自2017年以来已经有很多修复,首先检查是否是因为Jenkins插件的原因。
例如,在问题JENKINS-60536中报告了这个命令很慢,因为Jenkins管道对Jira Cloud的JiraSearch和JiraIssueUpdater,通过jenkinsci/jira-plugin PR 230进行了修复。

尝试禁用你的Jenkins插件,或使用另一个Jenkins实例(从新安装手动启动的实例),只是为了测试当由没有任何插件的Jenkins执行git rev-list时是否仍然很慢。


0
我不清楚你的项目范围,但在我看来,这个问题似乎是由于git rev-list是一个冗长的命令,它以相反的顺序列出了从所请求的提交开始的所有提交。根据你的配置,它可能会遍历所有分支而不是分离的HEAD
因此,如果命令的输出需要通过网络传输进行评估或重新分发到其他节点,那将是代价高昂的。
我不了解你的具体用例,但请确保你的从节点没有将命令的输出发送到主节点或其他节点,可以通过忽略命令的输出(可能在插件中使用)或配置Jenkins将所有任务委托给同一个从节点来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接