我正在尝试找出为以下环境拼接一个快速、可重复、牢不可破的构建过程的最佳方法。我有一个如何去做的计划,但我真的很感激批评。(我也很欣赏一些示例代码,但稍后会详细介绍)
生态系统 - 逻辑:
- 网站 - asp.net MVC 2、.net 3.5、Visual Studio 2010。IIS 6、Facebook iframe 应用程序。这个网站/facebook 应用程序使用一些服务。内部搜索 api、内部读/写 api、facebook 和 IP 地理定位服务。有关这些的更多详细信息,请参见下文
- 内部搜索 api - .net,宁静,使用老式 .ashx 处理程序构建。该 api 使用 lucene 和幕后的 sql server 数据库。我的项目不会触及 lucene 代码,但可能会触及数据库和 Web 服务。
- 内部读/写 api - java,restful,在 Tomcat 上运行
- 脸书网络服务
- 一个模拟内部读/写 api 和部分 facebook api 的模拟站点
- Hudson - 在签入时运行单元测试,并创建一些行为不一致的安装程序。
生态系统 - 物理:
除了 Hudson,所有这些机器都可以相互通信。Hudson 看不到任何目标机器。所以必须拉取代码,而不是推送代码。(安全的东西) 1. Web 服务器 - 保存网站和读/写 api。(api 本身写入复制的 sql server 环境)。
2. 搜索服务器 - 包含搜索 API。
3. Hudson Server - 无权推送到任何环境。他们必须拉。4. Lucene 服务器 5. 数据库服务器
问题
我一直在尝试将此站点设置为在压力环境中运行,但是设置步骤的数量、更新组件所需的时间、当前安装程序的黑盒性质以及所需的时间将数据生成到测试系统中绝对会破坏我的生产力。我调整了一个设置,必须重新部署,按特定顺序重新启动,重新设置一些设置,然后重建测试数据。错误导致头疼,然后基本上重新开始。很坏。
我的压力测试使这个问题更加复杂。我需要能够打开和关闭不同的外部组件,这样我才能有效地确定每个部分的可扩展性。我已经制定了如何为每个依赖项执行此操作的策略,但这使我的设置策略更加复杂,因为现在每个组件都有 2 个选项。模拟版,或者真实版。必须相应地更新各处的配置。
目标
- 快——我想在一切顺利的时候把这个从 20 分钟的练习减少到 3 分钟的练习
- 愚蠢的简单 - 我想告诉环境如何使用尽可能少的命令,而不必记住如何将环境拼接在一起
- 可重复 - 我希望脚本是幂等的。有点像愚蠢的简单事情的必然结果。
到目前为止的计划
到目前为止,这是我想出的内容,以及我来寻找反馈的内容:
- 使用 VisualStudio 的新 web.config 转换允许根据环境轻松更改配置。不过,这个解决方案还不够。我将保留 web.config 设置以让站点在本地运行,但在其他地方部署时,仅压力环境就有多达 6 个不同的可能输出(因为各种依赖项的模拟),更不用说设置产品、质量保证和开发。然后,其中的每一个都需要它自己的设置,或者需要对配置进行后处理的设置。所以我目前倾向于只拥有开发版本,以及将关键配置值转换为 ruby 字符串插值语法的版本。({#VAR_NAME} 有点像)
- 为每个服务器创建一个 ruby 脚本,该脚本本质上是一个引导脚本。也就是说,它只会从 hudson/subversion 加载执行“真正”工作的 ruby 代码,以便脚本的功能可以随着应用程序而发展,从而可以轻松地在任何时间点构建站点参考相应版本的脚本。所以简而言之,这个脚本加载另一个脚本并运行它。
- 然后,“真正的”ruby 脚本将接受描述环境外观的命令行参数。从那里,可以使用 1 个配置文件,ruby 将下载当前安装程序,运行它们,对配置进行后处理,重新启动 IIS/Tomcat,并启动所需的任何数据设置代码。
就是这样了。我正处于对这个网站进行压力测试的实时紧缩中,因此您认为任何可以缩短这可能需要的时间的反馈将不胜感激。这包括对示例 ruby 代码的无耻请求。我没有比“Hello World”更进一步。:-) 只是指导会有所帮助。这对 Rake 有用吗?您如何建议我为这种动物编写测试?(我使用接口和自动模拟框架来模拟 .net 中的 http 请求之类的东西。使用鸭子打字,似乎这可能更容易,但我不知道如何告诉我的代码在测试中使用假鸭子,但是在实践中真正的一个)
谢谢大家。对于这样一个冗长的、开放式的问题,我深表歉意。