构建环境设置 - 使用.net,java,hudson和ruby - 真的可以使用批评

Jef*_*f D 11 c# ruby rake hudson build-environment

我正在尝试找出为下列环境拼接快速,可重复,不易破碎的构建过程的最佳方法.我有一个如何做的计划,但我真的很感激批评.(我也很欣赏一些示例代码,但稍后会详细介绍)

生态系统 - 逻辑:

  1. 网站 - asp.net MVC 2,.net 3.5,Visual Studio 2010. IIS 6,Facebook iframe应用程序应用程序.这个网站/ Facebook应用程序使用一些服务.内部搜索API,内部读/写api,facebook和IP地理定位服务.有关以下内容的更多详情
  2. 内部搜索api - .net,restful,使用旧学校.ashx处理程序构建.api在后台使用lucene和一个sql server数据库.我的项目不会触及lucene代码,但可能触及数据库和Web服务.
  3. 内部读/写api - java,restful,在Tomcat上运行
  4. Facebook网络服务
  5. 模拟内部读/写api的模拟站点,以及facebook api的部分内容
  6. Hudson - 对checkin运行单元测试,并创建一些行为不一致的安装程序.

生态系统 - 物理:

除了Hudson之外,所有这些机器都可以相互通信.哈德森看不到任何目标机器.所以代码必须被拉,而不是被推.(安全事物)1.Web服务器 - 保存网站和读/写api.(api本身写入复制的sql server环境).
2.搜索服务器 - 提供搜索API.
3. Hudson Server - 没有权限推送到任何环境.他们必须拉.4. Lucene Server 5.数据库服务器

问题

我一直在尝试将此站点设置为在压力环境中运行,但是设置步骤的数量,更新组件所需的时间,当前安装程序的黑盒性质以及所需的时间将数据生成到测试系统中绝对会破坏我的生产力.我调整了一个设置,必须重新部署,按特定顺序重新启动,重置一些设置,并重建测试数据.错误导致头部划痕,然后基本上重新开始.很坏.

我的压力测试进一步使这个问题复杂化.我需要能够打开和关闭不同的外部组件,这样我才能有效地确定每个组件的可扩展性.我已经制定了如何为每个依赖项执行此操作的策略,但它进一步使我的设置策略复杂化,因为现在每个组件都有2个选项.模拟版本或真实版本.各地的配置必须相应更新.

目标

  1. 速度快 - 当事情进展顺利时,我希望将其从20分钟的运动中减少到3分钟
  2. 愚蠢的简单 - 我想告诉环境如何处理尽可能少的命令,而不必记住如何将环境拼接在一起
  3. 可重复 - 我希望脚本是幂等的.有点愚蠢简单的事情的必然结果.

迄今为止的计划

这是我到目前为止所提出的,以及我来寻求反馈的内容:

  1. 使用VisualStudio的新web.config转换允许根据环境轻松更改配置.但这个解决方案并不足够.我将设置web.config以让网站在本地运行,但是当在其他地方部署时,我只有6个不同的可能输出仅用于压力环境(因为各种依赖项的模拟),更不用说设置了prod,QA和dev.然后,这些中的每一个都需要它自己的设置,或者然后需要对配置进行后处理的设置.所以我现在倾向于只使用开发版本,以及将关键配置值转换为ruby字符串插值语法的版本.({#VAR_NAME}有点事)
  2. 为每个服务器创建一个ruby脚本,该脚本本质上是一个引导脚本.也就是说,它只会加载执行hudson/subversion"真正"工作的ruby代码,这样脚本的功能就可以随应用程序一起发展,从而可以轻松地在任何时间点构建网站.引用适当的脚本版本.简而言之,这个脚本加载另一个脚本并运行它.
  3. 然后,"真正的"ruby脚本将接受描述环境外观的命令行参数.从那里,可以使用1个配置文件,ruby将下载当前安装程序,运行它们,对配置进行后处理,重新启动IIS/Tomcat,并启动所需的任何数据设置代码.

就是这样了.我真的很紧张地对这个网站进行压力测试,所以你认为任何可能缩短时间的反馈都会受到赞赏.这包括对样本ruby代码的无耻请求.我没有比放入"Hello World"更进一步.:-)只是指导会有所帮助.这是Rake有用的东西吗?您如何推荐我为这种动物编写测试?(我使用接口和自动插件框架来模拟像.net中的http请求之类的东西.使用ducktyping,似乎这可能更容易,但我不知道如何告诉我的代码在测试中使用假鸭,但是在实践中真正的一个)

谢谢大家.对不起,这样一个冗长,开放式的问题.

rs_*_*atl 1

我会推荐两件事:

  1. 将您的配置集中在复制的容错存储库中,例如ZooKeeperCouchDB等。您可以将引导各种环境所需的所有信息放入该系统中,这样单个组件所需的唯一配置就是这个存储库。这将极大地提高您环境的可扩展性。

  2. 使用Puppet之类的工具进行部署和服务器管理。它将确保您的所有计算机在任何给定时间都处于正确的状态,并且可以轻松部署。它非常强大,将使您的生活变得更加轻松。