[英]docker build inside official jenkins container
我在docker上运行官方Jenkins容器。 我需要构建docker镜像作为成功构建的post动作,但Jenkins容器没有docker binary。
我看到了几个选项,首先是从官方图像中获取我自己的Jenkins容器,并提供docker binary。 第二个选项是使用具有docker和其他必要运行时的专用Jenkins slave。 第三种选择是为Jenkins服务器提供ansible。 我想在容器上运行所有东西,因为它干净,简单且易于重复。
你是怎么解决这个问题的? 从长远来看哪个是更好的解决方案,为什么? 我的首要任务是能够使用单个ansible命令配置,配置和引导整个CI基础结构。 此外,构建的docker容器将被推送到注册表等,因此组件之间的连接应该是最佳的,具有最小的复杂性或手动配置。
我们现在使用GoCD进行类似的设置,其中GoCD代理在docker容器中运行,并且必须在成功的管道上构建映像。
tl; dr仍然是一种hacky方式,但这是最好的行为选项: 使用从容器到运行Jenkins 的docker主机的TCP连接 。 请注意@Raphayol提到的安全隐患。
这是我们尝试的:
1)在docker中运行docker
不是个好主意。 导致IO子系统咆哮并重新启动的各种悬挂情况的结果是必要的。
2)建立在群上
Swarm集群或任何其他docker集群意味着运行容器不构建它们。 旧容器最新推回,因为不能保证在同一节点上执行构建和推送。
3)专用构建主机
虽然这可以胜过工作节点的目的,但自动缩放变得棘手。
4)安装码头插座
工作类型但在重负载时会产生随机IO锁,并且需要重新启动docker守护程序
5)通过TCP连接回来
这个选项现在可以工作几个月,虽然如果你的jenkins构建服务器很好地隔离它并不是一个明确的解决方案,你可以忍受这个。
[root@ip-10-10-10-10 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3630d84909e registry.backbase.com/gocd-agent "/sbin/my_init" 2 minutes ago Up 2 minutes 0.0.0.0:9040-9045->9040-9045/tcp docker_agent_1
[root@ip-10-10-10-10 ~]# docker exec -it e3 env|grep DOCKER
DOCKER_TLS_VERIFY=yes
DOCKER_HOST=tcp://10.10.10.10:2376
DOCKER_CERT_PATH=/var/go/docker-certs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.