繁体   English   中英

码头工人建在官方詹金斯集装箱内

[英]docker build inside official jenkins container

我在docker上运行官方Jenkins容器。 我需要构建docker镜像作为成功构建的post动作,但Jenkins容器没有docker binary。

我看到了几个选项,首先是从官方图像中获取我自己的Jenkins容器,并提供docker binary。 第二个选项是使用具有docker和其他必要运行时的专用Jenkins slave。 第三种选择是为Jenkins服务器提供ansible。 我想在容器上运行所有东西,因为它干净,简单且易于重复。

你是怎么解决这个问题的? 从长远来看哪个是更好的解决方案,为什么? 我的首要任务是能够使用单个ansible命令配置,配置和引导整个CI基础结构。 此外,构建的docker容器将被推送到注册表等,因此组件之间的连接应该是最佳的,具有最小的复杂性或手动配置。

在一个容器中安装docker不是一个好主意。

相关文章

但是,您可以通过安装docker socket来访问在主机上运行的docker守护程序。 它应该适用于测试目的,但不要在生产模式下运行,因为它会产生安全问题。

相关文章

您当然可以找到一个更清晰的解决方案,直接从您的主机管理您的部署/构建过程,查看Jenkins容器的退出状态。

我们现在使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM