想象一下,你将要pipe理许多服务器,这些服务器有很多人使用的不同的服务。 现在说你想重新configuration或更换其中一台服务器上的某些软件。 显然你不想在生产中的服务器上工作。
如果这是代码更改,作为开发人员,我会在本地开发机器上进行更改,在本地进行testing,并将更改提交到版本控制系统。 然后可以将这些更改部署在临时环境中,进一步testing并最终部署在生产环境中。 如果有必要的话,我也很容易回滚。
一般来说,或者具体来说,你如何在系统pipe理中做到这一点?
(首先想到的是使用虚拟机,并将虚拟机映像放在版本控制中,但是我确信有很多文献和我目前没有意识到的聪明的解决scheme。)
简短的回答是“操作系统部署pipe理”,“configurationpipe理”和“软件打包”。 长的答案如下。
我想在丹尼尔·皮特曼的答复中join一个关于什么形成系统pipe理“系统”的细目。
系统或环境将包括:
包括这些将是过程,如:
而且,您希望将这些内容结合在一起,协助您实现非function性目标,例如:
这是一个快速的大脑转储。 我相信更多可以被添加到所有列表。
你的问题涉及到一些这些没有使用特定的单词。 例如,您希望能够轻松进行部署并恢复,即需要可维护性; 你想在testing环境中进行testing,直到testing通过,即可重复性,可testing性和可测量性。 您正在考虑将vm映像放入版本控制中,因为您希望操作系统和configuration部署具有可重复性。
有很多工具可以帮助你,其中一些是Daniel提到的。 其他一些是:
再次,这不是一个全面的清单,但是我一直在脑海中引导我,希望它也会帮助你。
免责声明:我是Puppet的开发者之一。
显而易见的方法是应用这些概念:定义一个开发/testing/生产周期,并通过它们推动变化。 使用版本控制来跟踪系统。
简而言之,从这条path开始,就会发现您确实需要使这些东西自动化的工具 – 实质上,您希望自动化系统pipe理,以便您不要在机器上使用这些技术,而是在系统上使用这些技术pipe理机器。
像Chef , Puppet , Salt和CFEngine等工具都是解决第二个需求的stream行工具。 他们将系统pipe理转变为可以进行版本控制和testing的中央解决scheme。
DevOps运动是如何做到这一点的另一个良好信息的来源。 虽然这个原则是开发人员和运营人员之间更好的合作,但它也趋向于同样的方向。
在Windows环境中,围绕应用程序生命周期pipe理的这些问题正在通过System Center 2012解决。
在System Center虚拟机pipe理器(SCVMM)中,使用“服务模板”(例如经典的三层服务)和执行环境定义为“云”(例如开发,分期,生产)来定义服务。 可以对服务模板进行版本化(以自动方式)并将其推出到不同的云。 在此基础上,SCVMM负责调配,部署和configuration虚拟化硬件(虚拟机等)和软件(操作系统,应用程序组件等)。
系统中心服务pipe理器是将stream程从一个过程的angular度联系在一起的部分。 例如,问题pipe理和变更控制。