当 pipeline 中使用 Pipeline script from SCM 时,报错如下:

无法连接仓库:Command "git ls-remote -h -- ssh://git@xxxx.git HEAD" returned status code 128:
stdout:
stderr: No ED25519 host key is known for xxxx and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
这种原因是因为主机密钥验证的问题。解决方法主要有下面两种:
1. 全局关闭主机密钥验证
系统管理 -> 全局安全配置
2. 使用 ssh-keyscan 手工验证
使用 ssh-keyscan 工具生成 Gitlab 服务器的主机密钥验证信息,然后将这个生成的信息文件写入到 Jenkins 配置文件中的 known_hosts 验证文件中,其目的是为了实现对某个特定主机密钥的验证。
具体来说,ssh-keyscan 可以扫描并收集远程服务器的 SSH 密钥信息。known_hosts 文件通常用于存储已知的远程服务器的 SSH 主机密钥,当再次连接到这些服务器时,系统会通过对比存储在 known_hosts 文件中的密钥与实际服务器提供的密钥,来确保连接的安全性和真实性。通过将 Gitlab 服务器的主机密钥验证信息写入 Jenkins 的 known_hosts 文件,可以让 Jenkins 在与 Gitlab 服务器进行交互时,能够正确地验证 Gitlab 服务器的身份,确保通信的安全性。
// 直接在服务器上安装的 jenkins
$ sudo -u jenkins mkdir /var/lib/jenkins/.ssh
$ sudo -u jenkins ssh-keyscan -p 8023 gitlab.xiodi.cn >> ~/.ssh/known_hosts
// 使用 docker 方式安装的 jenkins
$ docker exec -it <jenkins_container_name> /bin/bash
jenkins@48f45b34ed19:/$ mkdir /var/jenkins_home/.ssh
jenkins@48f45b34ed19:/$ ssh-keyscan -p 8023 gitlab.xiodi.cn >> /var/jenkins_home/.ssh/known_hosts
jenkins@48f45b34ed19:/$ cat ~/.ssh/known_hosts # 里面会包含刚才添加的内容
如果使用 docker 方式安装的 jenkins,/var/lib/jenkins 目录被映射到主机上,也可以使用下面的方式:
// 假如: -v /data/jenkins_home:/var/jenkins_home
$ sudo -u jenkins mkdir /data/jenkins_home/.ssh
$ sudo -u jenkins ssh-keyscan -p 8023 gitlab.xiodi.cn >> /data/jenkins_home/.ssh/known_hosts