一、配置
jenkins 与 gitlab 均使用docker-compose搭建,并且搭建于不同的虚拟机上。
jenkins(最新的2.445版本):192.168.3.104
gitlab :192.168.3.105
二、搭建jenkins与gitlab,搭建过程省略,可以参考别人的
K8S+Jenkins+Harbor+Docker+gitlab集群部署_gitlab+jenkins+k8s+docker-CSDN博客
三、问题解决
在Jenkins与gitlab持续集成这一步出现问题。
我的操作步骤如下:
- Jenkins容器内生成ssh密钥对
- 将公钥添加到gitlab
- gitlab新建一个测试的内部项目(因为要验证ssh密钥配对,所以选择内部项目)
- Jenkins添加全局凭证,用户名填写gitlab的登录账号,并填写私钥
- Jenkins下载插Git Parameter、Publish Over SSH
- 新建Jenkins流水线项目,源码管理选git并填入gitlab的测试项目的ssh链接,凭证选择刚刚增加的凭证
这时候报错了:
无法连接仓库:Command "git ls-remote -h -- git@192.168.3.105:root/test.git HEAD" returned status code 128:
stdout:
stderr: No ECDSA host key is known for 192.168.3.105 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.
百度了一下,添加信任ip名单后(因为这步仍有错误,先不给出添加ip名单的方式),报另一个错误:
无法连接仓库:Command "git ls-remote -h -- git@192.168.3.105:33/root/test.git HEAD" returned status code 128:
stdout:
stderr: Permission denied, please try again.
Permission denied, please try again.
git@192.168.3.105: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
---------------------------------------------------------------------------------------------------------------------------------
网上找了一大批类似问题,没找到合适的答案,最后根据openai的答案手动尝试了几次,终于发现可以连接的方式:
从gitlab复制的项目的ssh连接是:git@192.168.3.105:root/test.git ,在前面加上 ssh:// ,中间加上端口号。
ssh://git@192.168.3.105:33/root/test.git
注意:这里的33端口是因为我在用docker-compose创建gitlab的时候定义了ssh端口
同样的,报第一个错误,于是先在jenkins 容器内执行一次,添加信任ip
git ls-remote -h -- ssh://git@192.168.3.105:33/root/test.git HEAD
再次在Jenkins填写地址 ssh://git@192.168.3.105:33/root/test.git ,这次成功添加并且拉取到了代码
最后问题虽然解决,但仍有疑问,似乎csdn上很多教程都没有出现我类似的问题,他们并不需要在gitlab的地址上添加ssh://,或许是我用错了插件或者版本???