测试驱动的基础架构部署开发?


11

我一直在使用puppet来部署基础结构,并且我所做的大部分工作是与Web 2.0公司进行的,这些公司都致力于Web应用程序的测试驱动开发。这里是否有人使用测试驱动的方法来开发其服务器配置?您使用什么工具来做到这一点?您的测试进行了多深?

Answers:


3

我认为您不能使用测试驱动的开发。但是您当然可以尝试在新服务器上进行单元测试

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

也许使用python脚本连接到数据库,网页和ssh服务。然后返回通过/失败。对您来说将是一个好的开始。

或者,您也可以将其汇总到一个监控解决方案中,例如Zenoss,Nagios或Munin。然后,您可以在部署期间进行测试;并在生产过程中进行监控。


我只是在这里对每条评论+1。哇。
约瑟夫·科恩

1

我认为约瑟夫·科恩(Joseph Kern)的监控工具是正确的。典型的TDD周期为:编写失败的新测试,然后更新系统,以使所有现有测试通过。这很容易适应Nagios:添加失败的检查,配置服务器,重新运行所有检查。想一想,有时候我确实做到了。

如果您想成为真正的核心人物,请确保编写脚本来检查服务器配置的每个相关方面。像Nagios这样的监视系统可能与其中某些监视系统无关(例如,您可能没有“监视”您的操作系统版本),但是没有理由您无法适当地进行混搭。


1
在规范的TDD周期中,我跳过了一步:重构。对于服务器管理员,这类似于在每次更改后迁移或重新分发服务以实现更好的配置:我认为这已经是当今大多数管理员的工作描述
Zac Thompson

这种方法很大程度上是我已经在做的(尽管s / Nagios / Zabbix /),但是这些更改直接进入了生产过程,感觉我可以做得更好。
乔恩·托珀2009年

您想要得到多少好?如果要避免在生产中进行测试优先,则需要一个可以充分模仿您的生产配置的测试环境。“足够”是指足以在测试环境中测试人偶自动化,并且仅在确定正确后才应用于生产。当然,这将花费非零的硬件成本。我不建议将其作为答案的一部分,因为它与“测试驱动”部分无关。
扎克·汤普森

1

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

  • 开发环境(每一个处理Puppet清单的人一个)
  • 测试环境
  • 生产环境

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

在我们生产机器的代表性子集上,还有另一个木偶以noop模式运行,并指向测试环境。我们使用它来发现清单的潜在问题,然后将其推入生产阶段。

更改通过后,即它们不会破坏应用程序开发人员的机器,并且不会在生产机器的“空”伪造过程的日志中产生不希望的输出,我们将新清单推送到生产中。我们有一个回滚机制,因此我们可以恢复到较早的版本。


1

我在一个正在迁移到TDD操作模型的环境中工作。对于某些事情,例如监视脚本,这非常有效。我们使用buildbot来设置测试环境并运行测试。在这种情况下,您将从“旧版代码”的角度处理TDD。在TDD中,“旧版代码”是没有测试的现有代码。因此,第一个测试不会失败,它们定义了正确的(或预期的)操作。

对于许多配置作业,第一步是测试服务是否可以解析配置。许多服务为此提供了一些便利。Nagios具有预检模式,cfagent没有动作,apache,sudo,bind,并且许多其他工具都具有类似的功能。对于配置,这基本上是一小步。

一个示例是,如果对不同的部分使用apache和单独的配置文件,则也可以使用不同的httpd.conf文件包装这些部分,以便在测试计算机上运行,​​从而对这些部分进行测试。然后,您可以测试测试机器上的Web服务器是否在那里给出了正确的结果。

您遵循相同基本模式的每一步。编写测试,通过测试,重构完成的工作。如上所述,当遵循此路径时,测试可能不会始终以公认的TDD方式失败。

里克


1

我相信以下链接可能会令人感兴趣

  1. Cucumber -nagios-该项目可让您将Cucumber套件转换为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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.