【问题标题】:docker build inside official jenkins containerdocker build 在官方詹金斯容器内
【发布时间】:2017-03-24 17:34:03
【问题描述】:

我在 docker 上运行官方 Jenkins 容器。我需要构建 docker 映像作为成功构建的后期操作,但 Jenkins 容器没有 docker 二进制文件。

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

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

【问题讨论】:

    标签: jenkins docker build continuous-integration ansible


    【解决方案1】:

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

    related article

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

    related article

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

    【讨论】:

      【解决方案2】:

      我们现在与 GoCD 有类似的设置,其中 GoCD 代理在 docker 容器中运行,并且必须在成功的管道上构建图像。

      tl;dr 仍然是一种 hacky 方式,但这是最好的行为选择:使用从容器到运行 Jenkins 的 docker 主机的 TCP 连接。请注意@Raphayol 提到的安全隐患。

      这是我们尝试过的:

      1) 在 docker 内运行 docker

      不是一个好主意。导致 IO 子系统只是吠叫并需要重新启动的各种挂起情况。

      2) 基于 swarm 构建

      Swarm 集群或任何其他 docker 集群意味着运行容器而不是构建它们。旧的容器会被推回为最新的,因为构建和推送不能保证在同一个节点上执行。

      3) 专用构建主机

      虽然这比工作节点的目的和自动扩展变得棘手。

      4) 挂载 docker 套接字

      一些工作,但在重负载时它会产生随机 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多