8

就在几年前,开发人员实际上制作了交付给客户的版本。这显然是一场灾难,原因不胜枚举。

然后,当我们开始了解我们方法的错误时,我们寻找一种在专用构建机器上自动构建整个应用程序的方法。当时的文化非常反对引入外部工具,因此我们通过编写 VB 应用程序构建了自己的自动构建系统。

这工作了一段时间,直到项目的结构开始改变,添加了新项目,我们需要以不同的方式构建应用程序。然后,我们的手动汽车制造商的弱点变得明显,并且随着时间的推移,变得越来越繁重。这种疾病现在已经发展到 QA(拥有我们的构建过程)甚至无法维护自动构建器的地步,因为它需要越来越多的编程技能。每次我们添加项目或更改现有项目中的某些内容时,它都会消耗更多的开发人员时间来使其正常工作。曾经有几天我们因为系统损坏而无法生成构建。

我现在处于可以改变这个过程的位置,我希望废弃整个系统并在它的位置放置其他东西。我的目标是:

  • 拥有一个可以在每天特定时间以零人工交互运行的自动构建系统。它应该能够收集所有源代码、编译所有应用程序、创建设置、将成品放在网络共享上,并可能触发自动化测试系统启动(我们使用 QTP)。
  • 自动构建系统应该足够灵活,可以轻松适应项目的变化,而无需进行大修。
  • 它应该足够简单,以便 QA 可以拥有系统,而不需要开发人员资源来更改构建的方式。

你有什么经验?你能推荐一个自动构建系统吗?我应该有不同的目标吗?

4

9 回答 9

5

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

于 2008-10-10T12:52:29.673 回答
5

我使用 FinalBuilder 和 FinalBuilder Server 进行夜间构建。有时它有点错误,但如果您认为它很容易创建可以构建 X 项目类型的可扩展项目,从更改脚本构建它的数据库并将其部署到测试服务器。

它还可以处理各种奇怪而奇妙的事情,例如压缩夜间构建并将其上传到 FTP 或自动创建 ISO 映像。

于 2008-10-10T14:15:53.700 回答
4

如果您在 Microsoft 堆栈中,请务必查看 MSBuild。

Joel 一直在不断地谈论FinalBuilder有多棒,所以这也值得一看。

于 2008-10-10T12:59:39.503 回答
4

我们刚刚从一组手动 Perl 脚本迁移到Buildbot设置。我找到它是因为这是Google 用于 Chrome 的

你可以做夜间工作,或者它可以与源代码控制集成,以便在任何人进行签入或其他各种事情时进行隔离测试构建。它也是并行的;您可以在构建农场中拥有多台机器,用于特殊任务或仅用于处理更多负载。

整个系统是用 Python 编写的,因此它与平台无关,如果您需要在多个平台上进行构建,这一点很重要。它可以做任何你可以从命令行做的事情;我们让它为用户模式组件调用 MSBuild,build为内核模式部件调用 DDK,并为单元测试构建运行产品。

开箱即用它支持大多数 OSS 源代码控制工具,但是如果您使用 TFS 或其他东西,您可能需要修改安装在从机上的包。

于 2008-10-10T13:22:00.440 回答
2

我认为你在这里是正确的。

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

您可能需要在人员或团队之间分担构建责任才能完成此任务。我会说每日构建是“团队责任”。

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

相反,我的目标是实现以下目标:

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

    每个都有其优点和缺点,我不打算提出建议,只是说具有良好 UI 支持的产品更易于使用,但有时功能远没有那么强大。如果您使用 VIsual Studio,MSBuild 非常强大,但学习曲线有些陡峭。

    于 2008-10-10T14:04:01.010 回答
    1

    对于随 MS Visual Studio 提供的工具,您可能希望使用 MSBuild。MSBuild 的其他社区工具集甚至可以让您从 Subversion 和 zip 输出中签出代码。

    我们正在公司成功地使用它。项目由多个解决方案组成,包含 100 多个子项目。奇迹般有效。

    于 2008-10-10T12:54:51.680 回答
    1

    如果您的构建机器是 Windows, Visual Build Pro很好。我认为这将满足您对拥有该系统的 QA的要求。但是不要误会我的意思,它非常强大。

    于 2008-10-10T12:58:43.683 回答
    1

    我们使用 CruiseControl.NET 和 UppercuT(使用 NAnt)来做到这一点。UppercuT 使用约定进行构建,因此通过回答三个问题(解决方案的名称是什么?源代码控制的路径是什么?贵公司的名称是什么?),您就可以很容易地开始构建。

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

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

    于 2009-05-16T18:57:45.747 回答
    0

    我们使用 Hudson buildbot 从 ant 构建脚本构建大型 Java Web 应用程序。哈德逊对我们来说非常甜蜜。它具有主/从设置,因此可以同时进行构建(在计时器上或按需)。从节点可以是任何操作系统/硬件组合,只要它已经具有所需的构建工具并且在网络上(并且不会每 10 分钟崩溃一次)。

    完整的基于 Web 的界面,包括实时控制台输出、更改日志、构建中的工件可在整个网络中使用,包括以前的构建(如果成功)。很棒的酱!

    于 2010-01-04T21:35:48.997 回答