为什么自动化构建?

时间:2010-12-04 05:17:58

标签: process build build-process build-automation

所以,我坚信每晚运行(甚至更频繁)的自动化构建,特别是在项目的后期阶段。我试图让今天的同事说服我们需要进行一些改变以促进这一点,并且他首先挑战了自动化构建的整个前提。星期五晚上已经很晚了,我度过了漫长的一周,我累了,老实说,我无法得到一个好的答案。所以,非常棒的Stack Overflow社区的好人,我带着这个简单的问题来找你:

为什么要进行自动构建(或者为什么不进行构建?)

6 个答案:

答案 0 :(得分:12)

我在虚拟机中设置了一个持续集成服务器,模仿我的生产环境;通过运行自动构建,当我做了一些搞砸代码的事情时,我知道很多,并且可以采取措施来修复它。

在一个包含多个人(尤其是大型项目)的项目中,无法保证每个用户都在运行测试并进行完整构建。没有完整构建的时间越长,当每个开发人员插入他的分支时,某些bug会潜入系统的可能性越大。自动化构建通过确保整个团队在一天左右的时间内知道出现问题以及谁负责来否定这个问题。

如需更多备份,尤其是累积时,您可以从我们自己的Jeff Atwood发送this article,或者从Joel Spolsky发送this one。从这最后:

  

以下是一些好处   每日建设:

     

当修复错误时,测试人员会得到错误   新版本很快,可以重新测试   看看这个错误是否真的得到了修复。

     

开发人员可以感觉更安全了   他们所做的改变不会破裂   任何1024个版本的系统   生产的,实际上没有   在他们的桌子上有一个OS / 2盒子   测试。

     

签入他们的开发人员   在预定之前更改   每日建立知道他们不是   要通过其他人来管   检查“破坏的东西”   构建“ - 就是这样的东西   导致没人能够编译。   这相当于蓝色   整个死亡的屏幕   编程团队,并发生了很多   当程序员忘记添加新内容时   他们创建的文件到存储库。   构建在他们的机器上运行良好,   但当其他人退房时,他们   得到链接器错误并停止冷   做任何工作。

     

外部团体   像营销,测试版客户网站,   等等谁需要使用   不成熟的产品可以选择一个构建   已知是相当稳定和保持   使用它一段时间。

     

保持   所有日常构建的存档,何时   你发现了一个非常奇怪的新bug   你不知道是什么造成的   它,你可以使用二进制搜索   历史档案,以确定何时   这个bug首先出现在代码中。   结合良好的源代码控制,你   可以追踪到哪个办理登机手续   引起了这个问题。

     

当一个测试者   报告程序员的问题   认为是固定的,测试者可以说   他们在哪个构建中看到了问题。   然后程序员看他什么时候   检查修复并找出答案   是否真的是固定的。

答案 1 :(得分:2)

请允许我从blatantly ripping off Wikipedia.开始。请记住,这些是持续集成的一般好处,其中夜间构建应被视为部分实现。显然,如果您将夜间构建与自动化(单元,功能等)测试结合使用,您的系统将更加强大。

优点:

  • 当单元测试失败或出现错误时,开发人员可能会将代码库恢复到无错状态,而不会浪费时间调试
  • 开发人员不断检测和修复集成问题 - 避免在发布日期的最后一刻混乱,(当所有人都试图检查他们稍微不兼容的版本时)。
  • 破坏/不兼容代码的早期警告
  • 冲突变化的预警
  • 对所有更改进行直接单元测试
  • 用于测试,演示或发布目的的“当前”构建的持续可用性
  • 立即向开发人员反馈他们正在编写的代码的质量,功能或系统范围的影响
  • 频繁的代码签入促使开发人员创建模块化,不太复杂的代码
  • 自动化测试和CI生成的指标(例如代码覆盖率,代码复杂性和功能完整的指标)使开发人员专注于开发功能,质量代码,并帮助团队发展势头

如果我们只是单独讨论每晚的构建策略,那么你得到的是一个持续的健全性检查,你的代码库在测试平台上进行编译,以及及时详细说明应该责备谁的快照。将此与自动化测试和持续集成的理智策略结合起来,突然间您拥有一个强大的套件,除了打破了构建之外,还为未通过测试的 提供了好交易,如果你问我。

您可以阅读remainder of the article,中的缺点,但请记住,这是我们在这里讨论的维基百科。

答案 2 :(得分:1)

由于,

  1. 自动测试单元测试的完整性。因此,您无需担心程序的功能因其他人所做的更改而被破坏。

  2. 自动获取最新的Checked-In文件并进行编译,因此其他报告引起的编译错误。

  3. 即时发送电子邮件确认失败并成功执行构建。所以你得到了构建失败的人。

  4. 可以与FX Cop,Code Cop for .Net等代码标准工具集成。因此,在构建时,它会自动检查编码标准。

答案 3 :(得分:1)

我认为......

  

这样你就知道你什么时候坏了   什么东西尽快而且可以   修复它,而它仍然是新鲜的   头,而不是几周后。

很容易成为我的最爱,但是当我在寻找你不使用CI的原因时,some other reasons被公然偷走了:

  • 您无法部署的代码是无用的代码。
  • 将代码更改与团队中其他人的代码更改集成。
  • 在我办理登机手续之前,我有时会忘记运行 ALL 单元测试。我的CI服务器永远不会忘记。
  • 代码的集中状态,有助于沟通。 (如果我检查了破损的代码而其他人必须进行部署......那么这可以追溯到我最喜欢的原因。)

答案 4 :(得分:0)

如果一个人没有定期进行完整的构建,那么最终会出现一个应该重新编译的程序的某些部分不是这样的情况,即编译该部分程序的失败隐藏了突破变化。部分构建将继续正常工作,但下一个完整构建将导致事情破裂,没有明显的原因。在那之后开始工作可能是一场噩梦。

答案 5 :(得分:0)

一个潜在的社会效益:自动构建可以降低团队成员的毒性。如果开发人员每天多次重复执行一个或多个步骤,那么错误就会逐渐消失。通过手动构建,团队成员可能会有这样的态度,“我的无能的开发人员不记得每天如何正确构建你认为他们现在已经失败了。“使用自动构建,出现的任何问题都是程序问题 - 被授予,某人编写的程序,但仍然。