Synchronization 保持测试和生产服务器环境清洁、同步和一致

Synchronization 保持测试和生产服务器环境清洁、同步和一致,synchronization,production-environment,consistency,test-environments,Synchronization,Production Environment,Consistency,Test Environments,我工作的公司似乎总是在与客户的服务器环境作斗争 具体地说,我们几乎总是在测试服务器和生产服务器时遇到问题,而且它们的配置似乎总是不同的。当我们测试我们开发的应用程序时,测试服务器以一种方式运行,因此我们调整和配置我们的应用程序以适应特定的行为。但是,当我们在生产服务器上安装相同的应用程序时,我们观察到另一种与测试服务器不一致的行为,从而使我们的调整和配置变得无用。最令人沮丧的是,这种情况一直在发生,似乎没有人知道该怎么办 当然,我们对发生这种情况的原因有一个大致的了解。每个克隆的环境在开始的几天

我工作的公司似乎总是在与客户的服务器环境作斗争

具体地说,我们几乎总是在测试服务器和生产服务器时遇到问题,而且它们的配置似乎总是不同的。当我们测试我们开发的应用程序时,测试服务器以一种方式运行,因此我们调整和配置我们的应用程序以适应特定的行为。但是,当我们在生产服务器上安装相同的应用程序时,我们观察到另一种与测试服务器不一致的行为,从而使我们的调整和配置变得无用。最令人沮丧的是,这种情况一直在发生,似乎没有人知道该怎么办

当然,我们对发生这种情况的原因有一个大致的了解。每个克隆的环境在开始的几天内都是相同的,但迟早会有人在其中一个服务器环境中重新配置某些内容(无论是数据库更新、组件库更新、web文件更新还是其他配置),从而导致差异。随着时间的推移,越来越多的差异越来越大。但问题是:我们能做些什么

我试着在网上搜索,但找不到任何好的答案。我也试着自己找出一些解决方案,但我的大多数想法似乎在某种程度上存在问题。新的常规,无论多么严格,都可以避免。定期克隆生产服务器以创建测试服务器是一个乏味且通常非常缓慢的过程。自动复制并不总是可靠的,甚至不可能。那么,对于这个问题,我们到底应该做些什么呢?我们如何保证测试时的体验与上线时的体验相匹配

我想其他人也有这个问题。还是他们?也许只是我的公司不称职?你们有谁遇到过这个问题吗?如果是,你对此做了什么

真诚地


瑞典系统开发人员Linus

您需要确保以一致的方式对环境进行任何更改

我会考虑从新的图像开始,执行严格的修改日志策略,或者使用像Castruo之类的东西来执行远程命令并同时向所有机器部署代码。


理想情况下,所有需求都应该检查到您的版本控制系统中(就像Rails如何让您将gem存储在/vendor目录中,并优先在运行时加载这些gem),以及一个自述文件,该文件准确地描述了如何设置环境(所需的库等)。任何对环境进行更改的人都需要严格更新自述文件。

您需要开始跟踪对测试环境所做的每个更改,并提供一种将其传播到生产环境的方法

对于代码,这意味着对CVS、Subversion或GIT等系统进行版本控制

对于数据库,它意味着更新生产数据库的结构比较工具或部署脚本

对于配置,两个系统应该完全相同,任何“调整”或更改都需要首先应用于测试服务器,然后在部署期间应用于生产服务器


除非你有一个有效的流程,否则你将继续遇到问题。

你的问题很正常。我知道至少有两种策略非常有效:

如果您是在linux上发行的,那么可以从开发过程中构建RPM/DEB,并使用包管理功能。我知道很多项目在内部项目中都取得了巨大成功

另一种选择是将整个环境打包为某种shell脚本。此shell脚本可以/应该使用所有设置配置完整的环境。通常,此脚本由development维护,并且此脚本覆盖手动进行的任何修改。这样的脚本通常由开发人员维护,在版本控制下保存,并作为完整分发版发送到部署。我们用cygwin来做这个。通常,脚本读取某种可能由操作管理的配置。我有一些脚本,它们实际上从头开始设置整个系统,就好像安装在一台全新安装的空白机器上一样

这两种策略最好都包括从构建脚本/构建系统自动生成这些工件。这一过程运行得越顺利,对所有相关方都越好

当然,我们对发生这种情况的原因有一个大致的了解。每一个克隆的环境在开始的几天内都是一样的,工作起来也一样,但迟早会有人在其中一个服务器环境中重新配置某些东西


我觉得你很慷慨,或者说你很幸运。通常,需要外包开发工作的商店并不真正了解开发过程。如果他们为您提供了一个测试环境,那么您将从上次服务器刷新之前的生产系统中获得一个测试环境。

为了保持MySQL数据库的同步,我刚刚使用了这个工具:


我还没有实际使用过它,所以我不能说它是否好,但我们需要某种方法来控制测试和产品之间的模式漂移,所以我们要试一试。

Linus,这是专门指将代码发送到客户的环境,对吗?您可以对这些环境实际施加多大的控制。另外,您可以列出您为客户支持的环境吗?窗户?Linux?雨衣?您现在有什么样的需求?对于配置管理,如果您感到非常雄心勃勃,您可以