美文网首页
同一个OS下docker化的jenkins与gitlab如何通信

同一个OS下docker化的jenkins与gitlab如何通信

作者: 养猫的老鼠 | 来源:发表于2019-08-28 16:02 被阅读0次

背景:

在同一个OS下通过docker安装了Jenkins和Gitlab(其实还有更多),通过不同的端口映射进行区分。进入Jenkins内部,产生SSH秘钥,将公钥添加进Gitlab,无法clone。

验证过程:

  1. 从Gitlab上(不特殊指定端口)Clone, 命令为git clone git@gitlab_ip:username/page/repository.git
    因为我们需要特殊指定端口,所以命令改为git clone ssh://git@gitlab_ip:port/username/page/reposiroty.git
  2. 在第二台Server上进行Clone(也需要产生秘钥,将公钥传至Gitlab),可以正常克隆。
  3. 进入Jenkins内部,执行克隆,这个时候提示fatal: could not create work tree dir 'directory': Permission denied,查询后得知这是目录权限的问题,通过whoami && id可以看到当前的用户是Jenkins(我安装的是Jenkins的官方版),我在创建容器的时候,映射了/var/jenkins_home到/home/jenkins_home下,于是修改/home/jenkins的所属者为Jenkins。在/var/jenkins_home/下执行git clone ssh://git@gitlab_ip:port/username/page/reposiroty.git,这个时候提示ssh: connect to host 10.128.128.164 port 2222: No route to host。在第一步的时候,我们已经在第二台Server对其进行过clone,所以Server端配置没问题。
  4. 这个时候产生了一个疑问,同一个IP的不同端口间能够互相通信吗?通过查询,得知可以用telnet -pPORT IP进行验证。通过验证发现,可以连接。
  5. 在查询的过程中,发现了一篇关于docker通信的文章,里面分析了同一个OS下两个不同docker容器是如何通信的。docker会创建一个bridge docker0,可以通过brctl show看到,docker0绑定了多个接口。通过docker network inspect bridge可以看到每个容器都分配了一个172.17.0.1/16网段的IP,分别获取到Jenkins与Gitlab容器的IP,在Jenkins内部ping gitlab,可以ping通。在Jenkins内部执行git clone git@172.17.0.3:username/page/repository.git,可以clone。
  6. 将Jenkins内部产生的秘钥,添加在Jenkins页面(公钥已经添加在Gitlab页面),可以clone。(看网上好几个show的Jenkins截图,可以在Web页面看到一个选择本机.ssh文件的选项,但我下载的版本里没有,不清楚是不是Jenkins后来撤销了)


    docker network
    docker container IP

处理git clone命令的非标准SSH端口连接
Jenkins Docker and Gitlab
docker容器网络 - 同一个host下的容器间通信
How To Set Up SSH Keys on CentOS 7
fatal: could not create work tree dir 'kivy'

相关文章

网友评论

      本文标题:同一个OS下docker化的jenkins与gitlab如何通信

      本文链接:https://www.haomeiwen.com/subject/xtapectx.html