我是一个.NET的家伙,因此与在Windows世界的事情工作...话说回来,虽然我每日的基础上合作,共同管理构建过程的技术,从你的世界来了! (Linux/java技术在括号中,但是我也包括了它们与Windows读取器的等价物)我使用CruiseControl.NET(CruiseControl),VisualSVN(SVN),Tortoise和NAnt(Ant)来照顾我所有的构建需求。
所有我的构建通常自动推并在检查的时间标记,这是通过CruiseControl的,因为它监视我的源控制(SVN或颠覆)来完成。当CruiseControl(CC)发现新代码已被检入时,它将执行一个CC项目,该项目又调用构建服务器上的Ant脚本。
Ant脚本在常见构建中为我做了几件事情。它将检出最新代码的副本并将其下载到构建服务器。然后它将构建代码以确保至少编译的东西。然后它设置我的数据库的干净副本,并执行任何SQL脚本以构建基准数据库直到当前版本。然后运行我所有的单元测试项目。然后运行集成测试,其中包括测试我的存储库层,以确保代码仍与我的后端对齐(我通常在我的项目中使用ORM,因此它们很少不同步......但这是一个很好的步骤正在进行中)。一旦所有测试都通过(或失败),我将数据库回滚到干净状态,并执行脚本以使其达到当前版本(这非常重要,因为它为团队提供了一个干净的数据库,以便在点击时进行开发的按钮)。如果构建成功,那么我会将代码部署到开发服务器(我也有一个点击部署到我的登台服务器和生产服务器)。如果您想在每次签到时标记您的代码库,那么您也可以在这里做到这一点。
一旦所有这些完成,我喜欢使用NDepend,NDoc和NCover对我的代码进行一些分析。 NDepend是一个代码分析工具,用于确保事物在架构上是正确的,命名标准是应该的,并且是一个全部更多。 NDoc提取所有代码注释并为我的代码创建MSDN样式文档。 NCover告诉我是否对我的代码进行了适当的单元测试。
然后,我写了一个自定义Ant任务,它解析了我的各种// TODO和// CodeDebt标记的所有代码,以生成另一份报告(通常在冲刺结束时)告诉我如何在我的代码库中建立了很多垃圾。这可以作为下一个冲刺的考虑因素。
所有这些报告都包含在构建电子邮件中,或者链接太适当。
请记住,所有上述情况发生在每次检查...并且没有任何人必须点击一个按钮!这是真正的持续集成,应该是每个构建主人的目标。
CruiseControl有一个基于web的控制台,它也允许非web开发人员(任何人)真正进入并执行这个推动,而不必检查代码......调用强制构建。
鉴于此框架,只要所有内容都受版本控制,就可以轻松地回滚推送。您需要另一个Ant脚本来执行相同的过程,但需要额外的第一个任务,因为它必须获取最新版本的代码,而不是最近版本来执行构建过程。所有的Ant任务都可以与不同的执行目标重用。
我尝试了一些下面的建议,包括Capistrano和CruiseControl,并检出了SpringLoops(非常酷的解决方案,但它不适用于我们)。 PHP Phing最终成为了一个完美的搭档。它很容易定制和设置。 – prime31 2009-07-09 17:50:32