你推荐哪些工具来自动构建应用程序?

8
仅几年前,开发人员实际上是为客户制作构建版本的。由于原因太多而显然是一场灾难。
然后,当我们开始了解自己的错误时,我们寻找了一种在专用构建机器上自动构建整个应用程序的方法。当时的文化非常不愿意引入外部工具,所以我们编写了一个VB应用程序来构建自己的自动构建系统。
这段时间运行得很好,直到项目结构开始改变,添加了新项目,并且我们需要以不同的方式构建应用程序。然后我们手动编写的自动构建程序的弱点变得明显,并且随着时间的推移越来越繁琐。现在,这种问题已经发展到了QA(拥有我们的构建过程)无法维护自动构建程序的地步,因为它需要越来越多的编程技能。每次我们添加一个项目或更改现有项目中的内容时,都需要消耗更多的开发人员时间才能使其正常工作。有时我们甚至无法生成构建版本,因为系统出现故障。
我现在有能力改变这个过程,并且打算废除整个系统并放置其他东西。我的目标是:
- 拥有一个自动构建系统,可以在每天特定的时间运行,不需要人为干预。它应该能够收集所有源代码,编译所有应用程序,创建安装程序,将成品放置在网络共享上,并可能触发自动化测试系统(我们使用QTP)。 - 自动构建系统应该足够灵活,以便轻松适应项目中的变化,而无需进行重大改进。 - 它应该足够简单,以便QA可以拥有该系统,并且不需要开发人员资源来更改构建方式。
你有什么经验?你能推荐一个自动构建系统吗?我是否应该有不同的目标?
9个回答

5

我目前使用集成了Ant的CruiseControl来控制项目构建。这允许构建计划的灵活性,并且使用Ant脚本可以相对容易地自动化整个构建过程。此外,在缺陷修复期间,您可以设置CruiseControl以监视源代码控制提交而不是时间段,并在发生这些情况时进行构建。这使得开发人员可以快速获得有关缺陷修复的反馈。


+1 for Cruise Control,我兼职担任公司的构建工程师,并将其用于每晚的构建(涉及多个产品的300多个手机),同时也用于发布构建。 - omermuhammed
1
从图标上看,我现在已经转换到了Hudson :) 在我看来,它比CC更加精致,并且设置不同类型的项目也更容易。 - workmad3

5
我使用FinalBuilder和FinalBuilder Server进行每晚构建。有时它有些错误,但如果您仔细考虑,就很容易创建可扩展的项目,可以构建X项目类型,从更改脚本构建其数据库并将其部署到测试服务器。
它还可以处理各种奇特的事情,例如压缩每晚构建并将其上传到FTP或自动创建ISO映像。

4

如果你使用的是微软技术栈,一定要研究MSBuild。

Joel总是大谈特谈FinalBuilder有多么好,所以也值得一看。


4
我们刚刚从一组手写的Perl脚本迁移到了Buildbot设置。我发现这是因为Google在使用它来构建Chrome浏览器
你可以进行夜间构建,或者它可以与源代码控制集成,以便在任何人检入时进行独立的测试构建,或者进行其他各种操作。它还可以并行工作;你可以在构建农场中拥有多台机器,用于专门任务或处理更多负载。
整个系统都是用Python编写的,因此它是平台无关的,这对于需要在多个平台上进行构建非常重要。它可以执行您可以从命令行执行的任何操作;我们让它调用MSBuild来构建用户模式组件,DDKbuild来构建内核模式部件,并运行产品进行单元测试构建。
开箱即用,它支持大多数OSS源代码控制工具,但如果您使用TFS或其他工具,则可能需要修改在从机器上安装的包。

+1 for buildbot!我最近从Cruise Control转换到BB,它有很多优点(更容易的配置,跟踪任意日志文件,易于调试,滑稽的IRC控制机器人...) - richq

2

我认为你的想法是正确的。

负责自动化构建过程的人需要对解决方案的组成有基本的了解。这并不一定意味着他们需要知道如何编写代码或架构解决方案,但他们需要对解决方案的编译、打包等过程有扎实的理解。

你可能需要在不同的人或团队之间分享构建的责任来达到这个目标。我会说每天构建是“团队责任”。

我会考虑建立一个基准构建配置,可以扩展为“特殊用途”的构建(除了构建发布版本),例如国际化版本、fxCop/质量工具配置、构建+运行单元测试、持续集成构建、在开发者工作站上运行的构建配置等。

相反,我会努力实现以下目标:

  • 自动版本控制、签名等
  • 能够产生详细的输出(日志)以帮助调试构建错误
  • 在这一点上 - 它应该正确处理错误,捕获尽可能多的信息并正确记录日志
  • 一致性 - 它应该每次都以相同的方式工作以产生可重复的结果
  • 在干净的、受限制的访问环境中运行
  • 有良好的注释/文档,以便新员工理解等。
  • 生成发布说明、编译指标、生成报告的选项(如果可用)
  • 能够部署到多个环境
  • 支持从源代码控制获取不同方式的源代码,例如按更改集、标签、日期等方式
  • 至于工具推荐,我使用过FinalBuilder、Visual Build Pro、MSBuild/Team Build、nAnt、CruiseControl和CIFactory以及老式的批处理文件。

    每种工具都有其优缺点,我不会做出推荐,只会说具有良好UI支持的产品在某些时候比较容易使用,但有时则远不如强大。如果你正在使用Visual Studio,则MSBuild非常强大,但学习曲线有点陡峭。


    很好的回答,但我真的希望你能包括更多的优缺点,因为你似乎使用了很多工具。+1 - JV.

    1

    就 MS Visual Studio 自带的工具而言,您可能想要使用 MSBuild。Community 的其他工具集甚至可以让您从 Subversion 检出代码并压缩输出。

    我们在公司中成功地使用它。项目由多个解决方案和100多个子项目组成。效果非常好。


    1

    Visual Build Pro很不错,如果你的构建机器是Windows的话。我认为这可以满足你对QA拥有系统的要求。但别误会,它非常强大。


    1
    我们使用CruiseControl.NET和UppercuT(使用NAnt)来完成这个任务。UppercuT使用惯例进行构建,因此只需回答三个问题(解决方案的名称是什么?源代码控制的路径是什么?您公司的名称是什么?),就可以轻松入手并开始构建。

    http://code.google.com/p/uppercut/

    这里有一些很好的解释:UppercuT


    0
    我们使用Hudson Buildbot进行大型Java Web应用程序的构建,使用ant build脚本。对于我们的目的来说,Hudson非常棒。它具有主/从设置,因此可以同时进行构建(按计时器或按需)。Slave节点可以是任何操作系统/硬件组合,只要它已经拥有所需的构建工具,并且在网络上(并且不会每10分钟崩溃)。
    完整的基于Web的界面包括实时控制台输出,更改日志,构建的工件可在网络上使用,包括以前的构建(如果成功)。太棒了!

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接