AIX环境下Jenkins执行git pull --rebase遇OpenSSL版本不匹配问题
git pull --rebase时的OpenSSL版本不匹配问题 这个问题我在AIX环境里处理过好几次,核心原因很明确:Jenkins的运行环境和你登录shell的环境变量不一致,导致Jenkins调用了系统旧版本的OpenSSL库,而你的Git是基于RPM安装的1.0.1p版本编译的,两者版本不兼容。
为什么git reset、git checkout能正常运行?因为这些命令只操作本地仓库,不需要通过SSH连接远程Git服务器,也就不会触发OpenSSL的版本校验;而git pull需要建立SSH连接,这时候就会检测到OpenSSL版本不匹配的问题。
下面是具体的解决步骤:
1. 确认Jenkins的环境变量差异
首先在Jenkins的构建任务里添加一个步骤,执行以下命令,对比你登录shell时的输出:
echo $LIBPATH ssh -V openssl version
你会发现Jenkins的LIBPATH里没有包含RPM安装的OpenSSL库路径,导致它优先加载了系统默认的/usr/lib下的旧版本OpenSSL(1.0.0s),而你本地shell的LIBPATH已经包含了RPM安装的OpenSSL库目录(比如/usr/local/ssl/lib)。
2. 修改Jenkins的环境变量,指定正确的OpenSSL库路径
方法一:全局配置Jenkins环境变量
进入Jenkins的「Manage Jenkins」→「Configure System」,找到「Global properties」,勾选「Environment variables」,添加一个变量:
- 变量名:
LIBPATH - 变量值:
/usr/local/ssl/lib:$LIBPATH(这里的路径要替换成你RPM安装的OpenSSL实际库路径,可以用rpm -ql openssl-1.0.1p-1 | grep lib查询)
方法二:在单个Job中临时设置
如果不想全局修改,也可以在具体的Job构建步骤里,先设置环境变量再执行Git命令:
# 先设置LIBPATH,让系统优先加载新版本OpenSSL库 export LIBPATH=/usr/local/ssl/lib:$LIBPATH # 再执行Git命令 git pull --rebase origin
3. 验证修复效果
在Jenkins的构建步骤里再次执行ssh -V和openssl version,确认输出的OpenSSL版本是1.0.1p,然后再运行git pull --rebase origin,应该就能正常执行了。
备选方案:重新编译Git(不推荐,除非环境变量修改无效)
如果修改LIBPATH导致其他依赖冲突,可以考虑重新编译Git,让它链接系统自带的openssl.base(1.0.1e)版本,这样和系统OpenSSH的版本保持一致。不过这个步骤比较繁琐,需要安装编译依赖,优先推荐前面的环境变量方法。
内容的提问来源于stack exchange,提问作者user1953600

