如何将版本控制,testing和持续集成/部署等开发实践应用于系统pipe理?

想象一下,你将要pipe理许多服务器,这些服务器有很多人使用的不同的服务。 现在说你想重新configuration或更换其中一台服务器上的某些软件。 显然你不想在生产中的服务器上工作。

如果这是代码更改,作为开发人员,我会在本地开发机器上进行更改,在本地进行testing,并将更改提交到版本控制系统。 然后可以将这些更改部署在临时环境中,进一步testing并最终部署在生产环境中。 如果有必要的话,我也很容易回滚。

一般来说,或者具体来说,你如何在系统pipe理中做到这一点?

(首先想到的是使用虚拟机,并将虚拟机映像放在版本控制中,但是我确信有很多文献和我目前没有意识到的聪明的解决scheme。)

简短的回答是“操作系统部署pipe理”,“configurationpipe理”和“软件打包”。 长的答案如下。

我想在丹尼尔·皮特曼的答复中join一个关于什么形成系统pipe理“系统”的细目。

系统或环境将包括:

  • 服务器
  • 操作系统
  • 组态
  • 供应商套餐; 和
  • 本地包

包括这些将是过程,如:

  • 操作系统部署或成像
  • configurationpipe理
  • 软件包pipe理
  • 审计/日志
  • 监控
  • 备份

而且,您希望将这些内容结合在一起,协助您实现非function性目标,例如:

  • 重复性
  • 可维护性
  • 可测
  • 性能
  • 可跟踪
  • 可测性
  • 可变性

这是一个快速的大脑转储。 我相信更多可以被添加到所有列表。

你的问题涉及到一些这些没有使用特定的单词。 例如,您希望能够轻松进行部署并恢复,即需要可维护性; 你想在testing环境中进行testing,直到testing通过,即可重复性,可testing性和可测量性。 您正在考虑将vm映像放入版本控制中,因为您希望操作系统和configuration部署具有可重复性。

有很多工具可以帮助你,其中一些是Daniel提到的。 其他一些是:

  • Kickstarts(基于RedHat),Preseed(基于Debian),WDS(MS Windows),用于部署已知的操作系统环境
  • Spacewalk / Satellite(基于RedHat),组策略(MS Windows)进行configuration和包pipe理
  • YUM和APT包装系统,用于生成,部署,升级和删除软件包(包含一个软件的二进制文件,数据和configuration集)
  • Nagios,OpenNMS和SCOM进行监控
  • Amanda,Bacula和Windows备份服务器进行备份
  • Munin,PCP和Hyperic进行性能监测
  • CVS,SVN,GIT或Bazaar进行版本控制
  • 哈德逊和jenkinsbuild立pipe理
  • selenium和机器人进行testing
  • Bugzilla,Request Tracker和Jira进行logging,沟通和跟踪

再次,这不是一个全面的清单,但是我一直在脑海中引导我,希望它也会帮助你。

免责声明:我是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理和变更控制。