前言
本篇记录两个在做 Jenkins 与 AIX 做持续集成得时候遇到的 Git clone 代码失败的问题,并已解决,分享出来或许能有所帮助。
- Dependent module /usr/lib/libldap.a(libldap-2.4.so.2) could not be loaded.
- 通过 SSH 进行 git clone 出现 Authentication failed
问题1:Dependent module /usr/lib/libldap.a(libldap-2.4.so.2) could not be loaded
Jenkins 通过 HTTPS 来 checkout 代码的时候,出现了如下错误:
[2021-06-20T14:50:25.166Z] ERROR: Error cloning remote repo 'origin' |
但是直接在虚拟机上通过命令 git clone https://git.company.com/scm/vas/db.git
,可以成功下载,没有出现任何问题。
- 如果将
LIBPATH
设置为LIBPATH=/usr/lib
就能重现上面的错误,这说明通过 Jenkins 下载代码的时候它是去/usr/lib/
下面找libldap.a
- 如果将变量
LIBPATH
设置为空export LIBPATH=
或unset LIBPATH
,执行git clone https://...
就正常了。
尝试在 Jenkins 启动 agent 的时候修改
LIBPATH
变量设置为空,但都不能解决这个问题,不明白为什么不行!?
那就看看 /usr/lib/libldap.a
是什么问题了。
# ldd 的时候发现这个静态库有问题 |
问题1:解决办法
# 尝试替换 |
重新链接完成后,重新连接 AIX agent,再次执行 Jenkins job 来 clone 代码,成功了!
问题2:通过 SSH 进行 git clone 出现 Authentication failed
由于 AIX 7.1-TL4-SP1 即将 End of Service Pack Support,因此需要升级。但是升级到 AIX 7.1-TL5-SP6 后无法通过 SSH 下载代码。
$ git clone ssh://git@git.company.com:7999/vas/db.git |
像这样的错误,在使用 Git SSH 方式来 clone 代码经常会遇到,通常都是没有设置 public key。只要执行 ssh-keygen -t rsa -C your@email.com
生成 id_rsa
keys,然后将 id_rsa.pub
的值添加到 GitHub/Bitbucket/GitLab 的 public key 中一般就能解决。
但这次不一样,尽管已经设置了 public key,但错误依旧存在。奇快的是之前 AIX 7.1-TL4-SP1 是好用的,升级到 AIX 7.1-TL5-SP6 就不好用了呢?
使用命令 ssh -vvv <git-url>
来看看他们在请求 git 服务器时候 debug 信息。
# AIX 7.1-TL4-SP1 |
# New machine AIX 7.1-TL5-SP6 |
可以看到的差别是 OpenSSH 的版本不同,可能是因此导致的,根据这个推测很快就找到了类似的问题和答案(Stackoverflow 链接)
问题2:解决办法
在 ~/.ssh/config
文件里添加选项 AllowPKCS12keystoreAutoOpen no
但问题又来了,这个选项是 AIX 上的一个定制选项,在 Linux 上是没有的。
这会导致同一个域账户在 AIX 通过 SSH 可以 git clone 成功,但在 Linux 上 git clone 会失败。
# Linux 上不识别改选项 |
- 如果
config
文件可以支持条件选项就好了,即当为 AIX 是添加选项AllowPKCS12keystoreAutoOpen no
,其他系统则没有该选项。可惜config
并不支持。 - 如果能单独的设置当前 AIX 的 ssh config 文件就好了。尝试将
/etc/ssh/ssh_config
文件修改如下,重启服务,再次通过 SSH clone,成功~!
Host * |