您如何将版本控制、测试和持续集成/部署等开发实践应用于系统管理?

are*_*337 18 linux windows backup testing version-control

想象一下,您要管理多个服务器,这些服务器提供许多不同的服务,供许多人使用。现在假设您要重新配置或替换其中一台服务器上的某些软件。显然,您不想在生产中的服务器上工作。

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

一般来说,或者具体来说,您如何在系统管理中实现这一目标?

(首先想到的是使用虚拟机并将虚拟机映像置于版本控制中,但我确信有很多文献和聪明的解决方案我目前不知道。)

Dan*_*man 16

免责声明:我是 Puppet 的开发者之一。

显而易见的方法是只应用这些概念:定义一个开发/测试/生产循环,并通过它们推动更改。使用版本控制来跟踪系统。

简而言之,沿着这条路走下去会发现你真的想要自动化这些东西的工具——本质上,你想要自动化系统管理,这样你就不会在机器上使用这些技术,而是在系统上使用它们管理机器。

像工具厨师木偶Cfengine的都是流行的工具,以解决第二个需要。他们致力于将系统管理转变为您可以进行版本控制和测试的中央解决方案。

DevOps的运动是如何做到这一点很好的另一个信息来源。虽然这条戒律是开发人员和运营人员之间更好的合作,但它也趋向于同一方向。

  • 现在我们知道谁来骚扰我们的偶人问题了…… (15认同)

nea*_*ora 15

简短的回答是“操作系统部署管理”、“配置管理”和“软件打包”。长答案如下。

我想在 Daniel Pittman 的回复中添加系统管理中构成“系统”的详细信息。

一个系统或一个环境将包括:

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

将这些过程包括在内,例如:

  • 操作系统部署或映像
  • 配置管理
  • 软件包管理
  • 审计/日志记录
  • 监控
  • 备份

您希望将这些组合在一起以帮助您实现非功能性目标,例如:

  • 重复性
  • 可维护性
  • 可测量性
  • 表现
  • 可追踪性
  • 可测试性
  • 可变性

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

您的问题涉及其中的许多问题,而没有使用特定的词。例如,您希望能够轻松部署并恢复,即希望可维护性;您想在测试环境中进行测试,直到通过即可重复性、可测试性和可测量性;您正在考虑将 vm 映像置于版本控制中,因为您希望操作系统和配置部署具有可重复性。

有很多工具可以帮助您解决这个问题,Daniel 提到了其中的一些工具。其他一些是:

  • Kickstarts(基于 RedHat)、Preseed(基于 Debian)、WDS(MS Windows)用于部署已知的操作系统环境
  • Spacewalk/Satellite(基于 RedHat),用于配置和包管理的组策略 (MS Windows)
  • YUM 和 APT 打包系统,用于生成、部署、升级和删除包(一组二进制文件、数据和配置组成的软件)
  • 用于监控的 Nagios、OpenNMS 和 SCOM
  • 用于备份的 Amanda、Bacula 和 Windows Backup Server
  • 用于性能监控的 Munin、PCP 和 Hyperic
  • 用于版本控制的 CVS、SVN、GIT 或 Bazaar
  • Hudson 和 Jenkins 用于构建管理
  • Selenium 和 Robot 用于测试
  • Bugzilla、Request Tracker 和 Jira 用于记录、通信和跟踪

同样,这不是一个全面的清单,而是我脑中用来指导我的东西,希望它也能帮助你。