重启了下 Jenkins,踩到了一个深埋多年的坑

2020-07-16 15:42:44 浏览数 (1)

问题描述

业务方反馈,Jenkins 上某个 job 没有将 release 版本的组件发布到 maven 私服,以致依赖方无法引用依赖。

了解这个问题的更多信息:

该 job 构建状态为 success,它使用 maven-release-plugin 时,没有将 release 版本的组件发布到 maven 私服,而是将 SNAPSHOT 版本的包发布到 maven 私服,同时 git 仓库的 pom.xml 版本也没升级,但是倒是打了 tag。

初步定位,切换备份

为什么会出现这个问题呢?

回顾最近 对 Jenkins 做的修改,共有两项

曾修改了 maven 工具的位置,难道是这个影响了?

也曾修改了 Jenkins 的 JVM 参数,然后重启了 Jenkins,难道是这个影响了?

理论上,修改 maven 工具的位置和修改 Jenkins 的 JVM 参数,和这个没关系的

恢复 maven 工具的位置,问题没有解决

恢复 Jenkins 的 JVM 参数,然后重启了 Jenkins,问题依旧

那那到底是什么原因呢?经过一段时间定位,这个奇怪的问题并没有得到解决,一时找不到答案

而同事在 Jenkins 备机构建该 job,表现正常,于是紧急切换备机,先让业务正常运行,然后继续定位问题

进一步定位,有所眉目

定位问题的过程并非一帆风顺,不断推测验证,有的时候会焦急不安,也难免陷入思维误区~~

所幸有备无患,可以静下心来深入分析问题~~

仔细查看 Jenkins 构建日志,对比正常的和有问题的日志:

正常的日志如下:

有问题的日志如下:

发现正常的在执行 mvn release:prepare 命令时少了某些步骤,如 git commit、git push。

同时,这步有问题也导致执行 mvn release:perform 时出现了问题,将SNAPSHOT 版本的包发布到 maven 私服。

查阅官网,借力搜索

查看 maven-release-plugin 官方文档,查看 prepare 步骤具体做的事情:

通过 bing 搜索 “mvn release prepare not Commit the modified POMs”,在 stackoverflow 找到一个相关问答:

https://stackoverflow.com/questions/15166781/mvn-releaseprepare-not-committing-changes-to-pom-xml

投票最高的答案截图如下:

问题解决,原来是环境兼容性问题

在上面的答案中,通过在 pom.xml 中通过 dependency 指定了 maven-scm-provider-gitexe 的版本为 1.8.1

难道是 maven-release-plugin 和 git 版本兼容性有关系?

对比服务器的 git 版本:

一个是 git-1.8.13,一个是 git- 2.1.0

备份机器是 git-1.8.13,这个环境环境下表现正常

将原 Jenkins 服务器 git 版本降到 1.8.13,终于终于,表现正常了~~~

追本溯源,为何此坑深埋多年?

但是这次出现的问题实在是很诡异,根源依旧未知,服务器上以前怎么就没问题呢?

后来发现服务器上有两个版本的 git,一个是 git-1.8.4.2,一个是 git-2.1.0

这应该是当时启动 Jenkins 的时候,当时环境下 git 的版本是 1.8.4.2

并且Jenkins 服务自从2014年运行以来从来没有重启过,所以这个问题一直没有出现

而在重启 Jenkins 的时候,git 是 2.1.0(这个环境变量是在 /etc/profile 中配置的),从而引发了这个问题,踩到了这个深埋多年的坑~~

问题得到解答,顿时一块石头落地,心情放松~~

0 人点赞