Deployment 虚拟化如何解决部署期间的开发/产品环境问题?

Deployment 虚拟化如何解决部署期间的开发/产品环境问题?,deployment,virtualization,virtual-machine,Deployment,Virtualization,Virtual Machine,我真的在尝试在我的web应用程序中使用依赖关系管理的最佳实践,但是事情发生了。有些问题只会在生产中出现。我想尽量减少这个 我在想,如果我可以使用最新的生产快照在虚拟机中测试新部署,这可以在一定程度上解决这个问题,不是吗? 确保开发环境是生产环境的快照 确保构建/部署系统在Dev中的工作方式与在Prod中的工作方式相同 确保每个部署都与所有其他部署的应用程序/服务隔离 确保开发/测试环境能够轻松访问产品数据。 要么是只读的,要么是可以随意修改的副本 我工作过的一家公司的每一个box Dev/Te

我真的在尝试在我的web应用程序中使用依赖关系管理的最佳实践,但是事情发生了。有些问题只会在生产中出现。我想尽量减少这个

我在想,如果我可以使用最新的生产快照在虚拟机中测试新部署,这可以在一定程度上解决这个问题,不是吗?

  • 确保开发环境是生产环境的快照
  • 确保构建/部署系统在Dev中的工作方式与在Prod中的工作方式相同
  • 确保每个部署都与所有其他部署的应用程序/服务隔离
  • 确保开发/测试环境能够轻松访问产品数据。
    要么是只读的,要么是可以随意修改的副本
我工作过的一家公司的每一个box Dev/Test/Prod都有相同的基本映像

现在,美国开发人员往往会感到奇怪,并安装我们自己的定制工具等(我从来没有见过一个开发人员不定制他们的环境),但这在这家公司是可以的:构建工具将在您的机器上构建和部署代码,就像在生产中部署代码一样(这样,您安装的任何自定义工具都将无法访问(默认情况下))

构建工具会自动检测所有依赖项,并将它们与应用程序一起部署(部署到同一目录(或应用程序目录中的符号链接))并适当设置路径。构建系统也可以以完全相同的方式部署到另一个开发人员的桌面或测试或产品,只需几个额外参数

我工作的另一家公司确实使用了虚拟机。
我觉得这个环境并不舒适。问题是,虽然理论上虚拟机是prod环境的完全复制品,但一旦出现问题,就更难诊断

  • 这里的问题是,由于虚拟机是测试环境,该公司认为开发盒不需要达到与prod机器相同的规格,也不需要相同的操作系统(错误之一:因为您现在无法在dev中可靠地调试)
  • 我们在机器上安装的工具在实际出现问题时通常非常有用。我们只安装一次,然后就可以在出现问题时快速配置和使用它们。如果您使用的是虚拟机(即prod的副本)您需要将所有额外的工具保留为安装程序,然后开始将所有这些额外的工具安装到虚拟机上(这既痛苦又耗时)。
    • 注意:您的构建系统必须能够在本地部署您的代码,以便默认情况下不受您的工具的影响。您需要能够将这些工具插入到正在运行的系统中
  • 我一直认为虚拟机只是一个可以启动的映像。
    • 我不知道这个构建系统为什么花了这么长时间,但配置一个虚拟机和设置适当的环境却花了45分钟(现在我不知道为什么我从来没有研究过它(我们有一个构建和测试团队,他们正在研究它,所以我也把它留给了他们))
  • 由于不断的安全补丁,虚拟机映像往往会偏离生产机器(并且不那么准确)。
    • 在A公司,开发人员/测试人员/生产人员同时获得相同的补丁。注意:安全补丁不是自动生成的。所有补丁都必须由生产和构建团队进行验证,以确保它们不会对生产系统产生不利影响。但一旦建立,补丁将自动应用于所有系统
    • 而在公司B中,虚拟机映像没有运行,因此安全补丁不会自动应用。结果证明,构建全新的虚拟映像需要齐心协力(我希望这是自动化的(我想可以吗?)因此,即使将安全补丁应用于prod/dev,它们也不会自动应用于虚拟映像。因此,虚拟映像每六个月才与生产重新同步一次