运行在物理机/虚拟机里的Jenkins服务,clone某个git repo时, 可以不指定credential,只要把Jenkins服务所在的OS的SSH公钥加入到git repo所在 管理系统(例如Github, Aliyun Code,Bitbucket等)的SSH公钥列表里就可以了。
这种方法的缺点是如果有多个Jenkins服务,代理管理系统里的公钥会有很多,不方便管理; 另外Jenkins没有自己的credential,可移植性不好,换一台服务器就不能正常工作了。
更好的方法是保存一对SSH秘钥,其中的公钥加入到代码管理系统里,
在Jenkins里创建一个类型为Username with private key的Credential,
其中Username是目标代码管理系统中的用户名,Private Key选择Enter directly,
把私钥内容粘贴进去。
这样就可从目标代码管理系统中clone代码了。
但有个限制,如果git repo带submodule,git submodule update时会失败。
这是由于credential只用于super repo,下面的package也需要,但拿不到这个credential,
这种情况只能老老实实在容器系统的~/.ssh里面把之前保存的密钥对加进去,
且要把私钥读写权限改成600:
进入容器:docker exec -it global-jenkins_global-jenkins_1 bash,
cd到$HOME/.ssh下创建id_rsa和id_rsa.pub,再chmod 600 id_rsa,
这样Jenkins就可以clone代码库了。