天天看點

适用于生産環境的通用型 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”中。這裡