正在回答 回答被采纳积分+1
写了份小结,希望能帮助到部分人,见链接:搭建 Jenkins 与 GitLab 的持续集成环境
这里有几个坎,以下两种错误都会导致本地能ssh git,jenkins和gitlab之间不行:
1. 找不到服务器,这个主要是对docker和docker-compose的网络安排不熟悉,可以参看https://docs.docker.com/engine/reference/commandline/network/ 和 https://docs.docker.com/compose/networking/,这个坎也分两种情况:
1)如果是用docker run命令起来打两个container,他们会在同一个docker默认的bridge网络下,但两个container不能够通过设定的hostname相互访问到,只能够通过设定的container name,或者containerID或者ip地址访问到,可以在源码管理git的页面把仓库URL的git地址里的域名换成容器名或者用docker inspect 容器名查看容器ip,改成ip,这样其实不方便,不如直接把gitlab容器名和Host name都起成域名的这种形式,这里就不用改任何东西了。
2)如果gitlab和jenkins是两个docker-compose构建的,他们就会在两个不同的网络,gitlab_default和jenkins_default内(_default前面的部分是docker-compose文件所在的文件夹名字,会因为文件夹的不同而改变),所以域名无法相互解析,无法相互通讯,解决办法是:一种,在容器都在运行的状态下,用docker network connect命令(具体参看前面的docker DOC链接)把其中一个容器连入另一个容器的网络,然后把gitURL域名改成容器名或者能识别的ip地址;第二种比较简单的办法是:把两个docker-compose合并成一个,把两个service的名字和Hostname都改成域名的形式,删除之前的两个容器,重新docker-compose,这样仓库URL这里就不用改任何东西了
2. 习惯了宿主机上进jenkins服务用11005端口,进gitlab用13800端口,所以这里写gitURL的时候也把ssh映射的端口13822也加进去了,就会出现第二个坎,端口拒绝访问,这是一个概念性的错误,docker设定的端口映射是映射到宿主机的端口的,如果是两台container之间通讯的话,还要写原始端口,所以这里不用写13822,也不用写22.默认Jenkins会去22端口访问。
顺便也说明一下,后面webhook的时候,gitlab填Jenkins任务的地址的时候,也一样要考虑是否在一个网络,域名是否能被解析,端口号用原来的8080,而不是映射端口号11005这几个问题
建议老师在教程里加一段docker networking的讲解,应该会解决大家的大部分问题
老师这个问题我也碰到了,我现在gitlab密钥也配置了,本地能通过gitlab的ssh方式拉代码,但还是有ssh://的问题?jenkins也发生报错了
配置公钥和私钥也是按照视频上的步骤配置的,那么问题还会出在哪呢
另外:
1.服务器的防火墙也关了,
2.安全组也放行了22,13822,13800,11005端口
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星