运行在物理机/虚拟机里的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代码库了。