天天看点

适用于生产环境的通用型 CI/CD pipeline

上一篇和本篇这两篇内容是特别增加的 CI/CD 相关的内容,主要目标是将前面所学内容应用于实践中。上篇主要会为你介绍几种将 Docker 应用于 CI/CD pipeline 中的方式,本篇会介绍完整的实践。

上一篇,我们的重点是“如何用 Docker”,分别介绍了 CI/CD pipeline 如何在物理机环境及容器环境使用 Docker。你可以对比实际的需求或是权衡利弊来选择以下方案中的一种或者多种:

  • 指定 DOCKER_HOST 的环境变量,通过 HTTP/HTTPS 的方式访问 Docker Daemon 无论它是在本机或者是启动在远端服务器上;
  • 挂载 Docker Daemon 的 Unix Domain Socket(默认是 /var/run/docker.sock)通常用于在容器环境内构建使用;
  • 使用 Docker in Docker 的方式,将 Docker Daemon 启动在容器内,可以做到比较好的环境隔离,用完后可以删掉。

虽然以上方案各有利弊,但在 CI/CD pipeline 的环境下,我个人比较推荐使用 Docker in Docker(DIND)的这种方式,因为 CI/CD pipeline 每天可能会触发很多次,那么隔离性和资源清理和回收就是我考虑比较多的方面了。

在每次触发 pipeline 时,使用容器启动一个 Docker Daemon,所有 pipeline 彼此独立,用完后即将其销毁,释放资源。

CI/CD pipeline 的组成

有了上述内容的铺垫,我们来具体到本篇的主题“CI/CD pipeline”中。这里