基础设施部署的测试驱动开发?

基础设施部署的测试驱动开发?

我一直在使用 puppet 部署基础设施,我的大部分工作都是与 Web 2.0 公司合作,这些公司非常重视对 Web 应用程序的测试驱动开发。这里有人使用测试驱动方法来开发他们的服务器配置吗?你用什么工具来做这件事?你的测试有多深入?

答案1

我不认为你可以使用测试驱动开发。但你当然可以尝试单元测试在新服务器上。

基本上,您需要部署服务器,以测试模式启动服务,然后从另一台服务器(或一系列服务器)针对服务运行测试。最后将它们投入生产。

也许可以使用 python 脚本连接数据库、网页和 ssh 服务。然后返回 PASS/FAIL。这对你来说是个好的开始。

或者您可以将其纳入监控解决方案,如 Zenoss、Nagios 或 Munin。然后您可以在部署期间进行测试;并在生产期间进行监控。

答案2

我认为 Joseph Kern 在监控工具方面的做法是正确的。典型的 TDD 周期是:编写一个失败的新测试,然后更新系统以使所有现有测试都通过。这很容易适应 Nagios:添加失败的检查,配置服务器,重新运行所有检查。回想起来,我有时确实这样做过。

如果您想要真正做到极致,则一定要编写脚本来检查服务器配置的每个相关方面。Nagios 之类的监控系统可能与其中一些无关(例如,您可能不会“监控”您的操作系统版本),但没有理由不能根据需要进行混合搭配。

答案3

虽然我还没有能够使用 Puppet 清单进行 TDD,但我们确实有一个非常好的周期来防止未经测试就将更改投入生产。我们设置了两个 puppetmaster,一个是我们的生产 puppetmaster,另一个是我们的开发 puppetmaster。我们使用 Puppet 的“环境”来设置以下内容:

  • 开发环境(每个在 Puppet 清单上工作的人员都有一个)
  • 测试环境
  • 生产环境

我们的应用程序开发人员在虚拟机上工作,这些虚拟机从开发 Puppetmaster 的“测试”环境中获取 Puppet 配置。当我们开发 Puppet 清单时,我们通常会设置一个 VM 作为开发过程中的测试客户端,并将其指向我们的个人开发环境。一旦我们对清单感到满意,我们就会将它们推送到测试环境,应用程序开发人员将在他们的 VM 上获取更改 - 当出现问题时,他们通常会大声抱怨 :-)

在我们生产机器的代表性子集上,有第二个 puppetd ​​以 noop 模式运行,并指向测试环境。我们使用它来在将清单推送到生产之前捕获清单中的潜在问题。

一旦更改通过,即它们不会破坏应用程序开发人员的机器,也不会在生产机器的“noop”puppetd ​​进程的日志中产生不良输出,我们就会将新的清单推送到生产中。我们有一个回滚机制,因此我们可以恢复到早期版本。

答案4

我相信以下链接可能会引起你的兴趣

  1. cucumber-nagios - 这个项目可以让你把你的黄瓜套件融入 Nagios 插件,并附带 SSH、DNS、Ping、AMQP 和通用“执行命令”类型任务的步骤定义
    http://auxesis.github.com/cucumber-nagios/
    http://www.slideshare.net/auxesis/behaviour-driven-monitoring-with-cucumbernagios-2444224
    http://agilesysadmin.net/cucumber-nagios

  2. Puppet/Python 方面也做出了一些努力 http://www.devco.net/archives/2010/03/27/infrastructure_testing_with_mcollective_and_cucumber.php

相关内容