【发布时间】:2019-12-18 12:24:17
【问题描述】:
长话短说
我应该在哪里提交 Dockerfile?在项目代码库中还是在 devops 代码库中?
推理细节:
没有 docker 也没有 CI
在古代,当开发具有多个代码库的复杂应用程序时,通常希望每个项目有一个 repo,并将所有密码、凭据和 dev/test/pre/prod 配置与代码分开。
+-----------------------------------------------------------------------+
| |
| +---------+ +---------+ +---------+ +---------+ |
| | app-1 | | app-2 | | app-3 | | app-4 | |
| +---------+ +---------+ +---------+ +---------+ |
| |
| +----+ |
| | |\ |
| | +-+ |
| | conf | |
| | files| |
| +------+ |
| |
+-----------------------------------------------------------------------+
在古代,一位系统管理员在服务器中安装了软件,然后复制了配置文件。早在 90 年代,管理员通常将这些文件放在自己的目录中,只与老板共享。
有 CI 但仍然没有 docker
后来我们改进了循环:在 Continuos 开发/集成环境中,“系统”本身需要能够克隆所有这些存储库,并且能够“构建”应用程序并将它们配置为准备好运行。然后将构建复制到服务器并进行相应的配置。
这使所有开发人员都可以在生产环境中触发部署,而不会泄露密钥。
在容器出现之前,公司通常有一个额外的“devops”(又名 CI 存储库),我们将所有这些配置文件组织起来并通过脚本知道。 CI服务器(pre-docker)知道所有源代码存储库,知道目标网络拓扑,拥有云的密码,复制/构建/部署其目标中的所有内容并对其进行配置,从而无需人工干预,前提是服务器启动并运行。
+-----------------------------------------------------------------------+
| |
| +---------+ +---------+ +---------+ +---------+ |
| | app-1 | | app-2 | | app-3 | | app-4 | |
| +---------+ +---------+ +---------+ +---------+ |
| |
| +----------------+ |
| | devops | |
| +----------------+ |
| | config-1-devel | |
| | config-1-pre | |
| | config-1-prod | |
| | config-2-devel | |
| | [...] | |
| | config-4-prod | |
| +----------------+ |
| |
+-----------------------------------------------------------------------+
CI 与 Docker
当谈到让 docker 在等式中发挥作用时,我想知道存放 Dockerfile 的正确位置是在应用程序 CVS 存储库中还是在 devops 存储库中。
Dockerfile 会进入应用程序代码库吗?
除非我们做一个需要在许多平台上运行的开源代码,否则通常公司会建立一个目标平台,而编码人员事先“知道”目标系统将是一个 Ubuntu,或者一个 CentO 左右。
另一方面,现在是编码人员自己将 Dockerfile 作为一个 moe 源代码文件来处理。这促使我们认为 Dockerfile 适合每个代码库,因为应用程序及其运行的系统可能会因需要某些要求而耦合。
+-----------------------------------------------------------------------+
| |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| | app-1 | | app-2 | | app-3 | | app-4 | |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| |Dockerfile-1 | |Dockerfile-2 | |Dockerfile-3 | |Dockerfile-4 | |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| |
| +----------------+ |
| | devops | |
| +----------------+ |
| | config-1-devel | |
| | config-1-pre | |
| | config-1-prod | |
| | config-2-devel | |
| | [...] | |
| | config-4-prod | |
| +----------------+ |
| |
+-----------------------------------------------------------------------+
或者 Dockerfile 是否会进入 devops 代码库(也称为 CI 服务器代码库)?
但似乎程序员也应该执行相同的代码行,例如,如果他正在编写一个 Web 应用程序,尽管它是在 apache、nginx 或 caddy 服务器下运行的......所以“决定”运行时似乎应该将其编码到 devops 代码库中:
+-----------------------------------------------------------------------+
| |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| | app-1 | | app-2 | | app-3 | | app-4 | |
| +-------------+ +-------------+ +-------------+ +-------------+ |
| |
| +----------------+ |
| | devops | |
| +----------------+ |
| | Dockerfile-1 | |
| | Dockerfile-2 | |
| | Dockerfile-3 | |
| | Dockerfile-4 | |
| +----------------+ |
| | config-1-devel | |
| | config-1-pre | |
| | config-1-prod | |
| | config-2-devel | |
| | [...] | |
| | config-4-prod | |
| +----------------+ |
| |
+-----------------------------------------------------------------------+
在团队中,我们无法阐明正确的方法,我已经进行了搜索,但我无法找到说明不同 Dockerfile 是否应提交到应用程序存储库或 devops 存储库(AKA CI 存储库)的文档。
我应该在哪里提交它们?
【问题讨论】:
标签: version-control architecture dockerfile devops