长话短说
我应该在哪里提交Dockerfile?在项目代码库中还是在devops代码库中?
推理细节:
没有码头也没有CI
在古代,当开发一个具有多个代码库的复杂应用程序时,通常希望每个项目都有一个repo,并将所有密码、凭据和dev/test/pre/prod配置与代码分离。
+-----------------------------------------------------------------------+
| |
| +---------+ +---------+ +---------+ +---------+ |
| | app-1 | | app-2 | | app-3 | | app-4 | |
| +---------+ +---------+ +---------+ +---------+ |
| |
| +----+ |
| | |\ |
| | +-+ |
| | conf | |
| | files| |
| +------+ |
| |
+-----------------------------------------------------------------------+
在古代,一个sysadmin在服务器上安装了软件,然后复制了配置文件。回到90年代,sysop通常将这些文件放在自己的目录中,只与老板共享。
有CI但仍然没有码头
稍后,我们改进了循环:在连续开发/集成环境中,“系统”本身需要能够克隆所有这些repos,并能够“构建”应用程序,并将它们配置为可以运行。然后将构建复制到服务器并相应地配置它们。
这使得所有开发人员都能够在生产中触发部署,但仍然不会泄露秘密密钥。
在容器之前,通常情况下,公司有一个额外的"devops“(AKA回购),我们有所有这些配置文件的组织和脚本知道。CI服务器(预对接者)知道所有源代码回复,知道目的地-网络拓扑结构,有云密码,复制/构建/部署其目的地中的所有东西,并配置它,这样就没有必要在服务器启动和运行的情况下进行人工干预。
+-----------------------------------------------------------------------+
| |
| +---------+ +---------+ +---------+ +---------+ |
| | 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在等式中发挥作用时,我想知道Dockerfile的正确位置是在应用程序CVS存储库中还是在devops存储库中。
Dockerfile会进入应用程序代码库吗?
除非我们做一个需要在许多平台上运行的开源代码,否则公司通常会建立一个目标平台,而编码者“知道”目标系统将是Ubuntu,或者CentOs之类的。
另一方面,现在编码人员将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代码库(AKA,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应该被提交到应用程序repos或devops (AKA回购)的文档。
我该在哪里把他们交出来?
发布于 2019-08-19 03:12:21
将Dockerfile放入应用程序代码库
也许,如果组织中有一些不标准化的应用程序,或者同一公司中有多种不同策略的语言,那么Dockerfile应该位于存储库级别,以允许直接修改。
但是,如果我们谈论的是几十个/数百个微型服务,会发生什么呢?
在这种情况下,开发人员不应该修改Dockerfile,因为它以前是由架构师、技术主管或高级开发人员开发的。
让我们设想一个Dockerfile、entrypoint.sh和其他必需的文件,它们是数十个具有相同性质的应用程序的基础,比如同一个组织中的java微服务。下面是一些需要考虑的问题,如果Dockerfile已经进入了代码库:
将Dockerfile放入devops代码库
我的建议,基于我的几十个申请,正是你提到的。这里有一些优点:
C.I平台
如果您选择将Dockerfile放到devops代码库中,而不是在您的组织中的每个git存储库中,您必须开发如下所示的流:
我可以推荐你詹金斯,因为它使用方便
配置文件
如果可能的话,我建议您不要在应用程序的构建阶段使用复杂的文件。开放源码技术可以很好地做到这一点,但是如果您使用的是一些专有语言,那么您就需要:S。
无论如何,如果在构建阶段需要配置文件,可以使用:
发布于 2019-08-12 09:32:58
我建议将它保存在您的应用程序中,因为它应该随着代码库的发展而发展。IMHO的最佳实践是在应用程序中保留CI代码和配置,而不是单独的回购,这样您就不必管理应用程序代码版本和配置之间的依赖关系。
https://stackoverflow.com/questions/57452441
复制相似问题