在镜像,但独立的生产环境中发生故障

我在“开发环境应尽可能接近生产环境”方面遇到一些问题。

(生产机器的操作系统是Linux。)

我对开发步骤的理解(粗略):

  • 代码,编译,testing/运行,重复

“通常情况下,”我会在自己的机器上浏览这些代码,然后将代码推送到CI进行testing,并可能进行部署。 CI将负责在与生产相匹配的环境中运行testing,这样,如果testing通过,则认为代码在生产中也可以正常工作。

环境较大的问题

☑某种数据库。
☑作业处理池 – 用于一些长时间运行的后台任务。
☑用户帐户pipe理 – 也被其他系统使用。
☑集中logging – 理智。
☑转发代理 – 在同一url但不同path下绑定各个http可访问的服务。
☐可能的其他服务或服务集合。

解决scheme?

  • 所有在我自己的机器上? 在地狱里没有办法。
  • 所有在虚拟机上? 也许,但是安全方面,如果这个设置应该反映prod.env。和prod.env。 就是这样,好吧..如果违反,这可能不是一个好主意。
  • 除以责任,并在多个虚拟机上设置它们? 谁来pipe理所有这些机器? 我认为可以做得比这更好。
  • 使用像Docker这样的容器,或者自己一起打巴掌? 听起来不错:(可能:)非常快的迭代周期,关注点分离,一些分离的安全性,以及容易的重现性。

为了简单起见,假设我们select的集装箱化工具是Docker,而且我们不打算使用libvirt / lxc工具/直接内核调用来构build自己的工具。

所以Docker可能是CoreOS或者Project Atomic。 所以现在有一个应用程序(或多个应用程序)的容器已经与系统的其他部分分离,并且可以在任何地方几乎相同。

  • 解决scheme1:生产环境漂亮,优雅。
  • 问题1:这不是开发环境。

开发环境

不pipe怎样select不把生产环境洒到我自己的机器上,问题依旧:

即使生产环境设置正确,我也必须在某处进行编译和testing,然后才能部署(通过CI或其他方式进行另一轮testing)。

我如何解决这个问题?

实际上,解决这个问题的正确方法是通过在自己的机器上编写代码,使其在虚拟镜像生产环境中同步/直接可见,从而自动运行testing?

当我不想运行所有的testing时,会发生什么情况,但是现在只有我正在编写的部分呢? 每次都要编辑自动编译过程吗? 怎么样远程debugging,因为多个系统必须编排以正确的方式运行,debugging必须附加到其中一个程序之间。 更不要说“ 代码,testing ”周期的速度,这将是非常缓慢的。

这听起来像CI这样的helluvalot,但是多个开发人员不能全部使用相同的CI并修改它,所以他们可能必须在自己的机器上进行此设置。

我也在想,开发者可以使用一个完全虚拟化的操作系统,它包含了所有的开发工具,并且在生产环境中是镜像的,但是这会迫使老用户采用虚拟开发环境的工具,听起来这个好主意。