2008-10-15 96 views

回答

0

每晚构建并不总是必要的 - 我认为他们只对大型项目非常有用。但是如果你在一个大项目中,每晚构建一个检查一切正常的好方法 - 你可以运行所有的测试(单元测试,集成测试),构建你的所有代码 - 简而言之,验证什么都不是在你的项目中破碎。

如果你有一个较小的项目,你的构建和测试时间将会缩短,因此你可以负担得起更多的定期构建。

2

嗯......当然,我认为这取决于您的项目。如果它只是你的爱好项目,没有发布,没有依赖关系,没有人,但你提交代码,这可能是矫枉过正。

另一方面,如果有一组开发人员都提交代码,那么自动每晚构建将帮助您确保存储库中代码的质量。如果某人为所有其他人做了“打破构建”的事情,它很快就会被注意到。可以在不注意的情况下打破构建,例如忘记将新文件添加到存储库,每晚在中央位置构建都会很快检测到这些文件。

当然还有其他可能的好处,我相信别人会提供这些好处。 :)

3

这也取决于在您的项目上工作的团队的规模和结构。如果有不同的团队依赖于其他API,那么为了频繁集成而进行夜间构建可能很有意义。如果你只用一两个队友来砍掉它,它可能会也可能不值得。

2

我认为他们对于超过1人的项目尤其重要。球队需要尽快知道是否有人:

  • 检查不好的文件
  • 没有在文件中
  • 检查...
44

你应该做每晚构建以确保你的代码库保持健康。

夜间构建的副作用是它迫使团​​队创建和维护一个完全自动化的构建脚本。这有助于确保您的构建过程被记录并可重复。

自动版本是善于发现存在以下问题:

  • 有人的东西,打破的东西进行检查。
  • 有人忘记检查必要的文件或更改。
  • 您的构建脚本不再有效。
  • 你的打印机坏了。

每晚这样做可以确保您在发生此类问题的24小时内发现此类问题。在您应该交付软件之前24小时,找到所有问题比较好。

当然,您还应该为每个每晚构建运行自动单元测试。

1

每晚构建仅适用于大型项目(当它在一天中经常需要很长时间才能构建时)。如果你有一个小型项目不需要很长时间就可以构建,你可以在你完成代码的功能性部分的时候构建它,这样你就可以知道你在程序中没有搞乱任何东西。然而,更大的项目,以便构建项目只是让你知道,一切都还在正常工作

22

我个人发现持续集成比夜间更重要的是这是不可能的建立:
http://en.wikipedia.org/wiki/Continuous_integration

我甚至在一个人的项目中使用它,它惊人地快速暴露问题并在那里照顾他们。

+8

夜间构建和持续集成不是排他性的,你可以使用夜间构建作为你持续构建过程的一部分。 – t3mujin 2009-01-06 16:26:31

+1

`我甚至在一个男人项目上使用它'如果你自己处理它,那么我想你在*箱子里工作?或者,当你决定在一个分支机构工作时,为什么要整合到* trunk *中?那么,一个人项目中的不同之处在于编程和将代码与* Trunk *同步,并确保它可以在同步代码之前构建和通过(自动)测试,或者执行持续集成练习?有些工作可能需要更多的时间才能集成到* trunk * =>中,那么持续集成是不切实际的。或者请告诉我有什么不同。 – 2013-11-08 08:26:27

7

实际上,您应该期望的是持续集成和自动测试(这比每晚构建还要进一步)。

如果您有任何疑问,您应该阅读this article by Martin Fowler about Continuous Integration。总而言之,你想要尽早建立和测试,以便立即发现错误,以便可以修复错误,而在造成错误时你试图达到的目标仍然是新鲜事物。

+2

夜间构建和持续集成不是排他性的,您可以使用夜间构建作为持续构建过程的一部分。 – t3mujin 2009-01-06 16:27:07

7

我实际上建议在每次检入时都要建立。换句话说,我建议设置一个持续集成系统。

这种系统的优点和其他细节可以在in Fowler's articleon the Wikipedia entry等地找到。

根据我个人的经验,这是一个质量控制问题:每次代码(或测试,可以被视为一种形式的要求)被修改,错误可能会蔓延。为了确保质量,你应该做一个新鲜的因为它将被运送并执行所有可用的测试。这种做法越频繁,就越不容易形成一个殖民地。因此,每日(每晚)或连续的周期是首选。此外,无论您是将项目的访问权限限制在开发人员还是更大的用户群中,夜间构建都可使每个人都处于“最新版本”,从而最大程度地减少将自己的贡献重新合并到代码中的痛苦。

2

任何构建自动化,总比没有的构建自动化:-)

个人更好,我更喜欢的日常构建 - 如果这样构建不工作,那么每个人都围绕得到它固定。实际上,如果可能的话,持续集成构建就是要走的路(即在每个签入时建立一个基础),因为这样可以最大限度地减少构建之间的变化量,从而可以轻松地分辨谁打破了构建也很容易修复构建。

1

有几个原因,有些人会比其他人更适用

  • 如果你的项目是由两个或两个以上的人
  • 这是抓住了最新版本的代码,一个很好的方式制作您在代码
  • ,如果你需要发送代码到人每晚构建会给你一个稳定版本的当前状态的时间不工作
  • 每晚构建提供了一个切片
0

每晚构建是执行静态代码分析的理想选择(请参阅qalab及其在Java世界中收集统计信息的项目)。不幸的是,这是很少做的事情。

4

你想要建立在的定期时间表上,以便发现开发人员之间的代码集成问题。你希望这样做的原因是,每周或者更长的时间表,而不是每周都会这样做,就是你等待发现这些问题的时间越长,解决它们的难度就越大。在每次检查(持续集成)时进行构建的做法只是将夜间构建过程转化为逻辑极限。

从长远来看,具有可重复构建过程的副作用也很重要。如果你在一个有多个项目正在进行的团队中工作,那么在某个时候你需要能够轻松地重新创建一个旧版本,或许可以创建一个补丁。 :(

构建过程自动化程度越高,每次后续构建的存储时间就越多,也需要构建过程本身脱离交付最终产品的关键途径,这应该会让您的经理感到开心。:)

19

我一直在做建设工程(其中包括)16年。我坚信建立早期,建立 - 经常持续集成。因此,我在项目中做的第一件事是确定它将如何构建(Java:AntMaven; .NET:NAntMSBuild)以及如何管理它(Subversion或某些其他版本控制)。然后,我将根据平台添加持续集成(CruiseControlCruiseControl.NET),然后让其他开发人员松动。

随着项目的增长,报表和文档的需求不断增加,最终构建需要更长的时间才能运行。此时,我会将构建版本拆分为连续版本(在签入时运行),只编译和运行单元测试和每日构建,构建所有内容,运行所有报告并构建任何生成的文档。我还可以添加标签库的交付版本,并为客户交付执行任何其他包装。我将使用细粒度的构建目标来管理细节,以便任何开发人员都可以构建系统的任何部分 - 持续集成服务器使用与任何开发人员完全相同的构建步骤。最重要的是,我们永远不会提供构建测试或未使用构建服务器构建的客户。

这就是我做的 - 在这里就是为什么我这样做(为什么你也应该这么做):

假设你有一个典型的应用,与多个项目和几个开发商。虽然开发人员可能会从一个共同的,一致的开发环境(相同的操作系统,相同的补丁,相同的工具,相同的编译器)开始,但随着时间的推移,他们的环境将会出现分歧。有些开发人员会虔诚地应用所有安全补丁和升级,而其他开发人员则不会。一些开发人员会添加新的(也许更好的)工具,而其他人则不会。有些人会记得在建筑之前更新他们的完整工作空间;其他人只会更新他们正在开发的项目的一部分。有些开发人员会将源代码和数据文件添加到项目中,但忘记将它们添加到源代码管理中。其他人将编写依赖于他们环境特定怪癖的单元测试。因此,您很快就会看到这种流行的“嗯,它在我的机器上构建/运行”的借口。

通过拥有一个用于构建应用程序的单独的,稳定的,一致的,已知良好的服务器,您将轻松发现这些类型的问题,并且通过从每次提交运行构建,您将能够查明何时出现问题悄悄进入系统。更重要的是,因为您使用单独的服务器来构建和打包应用程序,所以每次都会以相同的方式打包所有内容。没有什么比开发人员将自定义构建版本发送给客户更糟糕了,让它工作,然后不知道如何重现自定义。

3

根据产品的复杂性,持续集成可能会或可能无法运行完整的测试套件。

想象一下,思科测试路由器时需要测试1000个不同的设置。要在某些产品上运行完整的测试套件需要时间。有时几周。所以你需要构建出于不同的目的。每晚构建可以作为更彻底的测试套件的基础。

9

当我看到这个问题时,首先我搜索了Joel Spolsky's答案。有点失望,所以我打算在这里添加它。

希望大家都知道Joel Test on Careers

从他The Joel Test: 12 Steps to Better Code

3.博客你做每日构建?

当您使用源代码管理时,有时一个程序员 意外检查破坏构建的东西。 例如, 他们已经添加了一个新的源文件,并且它们的 机器上的所有内容都编译得很好,但他们忘记将源文件添加到代码 存储库中。于是他们锁定了自己的机器并回家,不知所措,并且很快乐。但没有人能工作,所以他们也不得不回家,不高兴。

打破构建是如此糟糕(以及如此普遍),它有助于使日常构建 ,以确保不会引起破坏不被忽视。 在大型 团队中,确保立即破损的一种好方法是 ,例如午餐时间每天下午进行日常生成。每个人在午餐前尽可能多地办理登记手续。当他们回来时, 构建完成。如果它工作,太棒了!每个人都会检查最新版本的源代码并继续工作。如果构建失败,您可以修复它,但每个人都可以继续使用预构建的源代码版本 。

在Excel的团队,我们有一个规则,谁打破了建立,作为他们的 “惩罚”,负责照看建立,直到有人 别人把它弄坏了。这是一个很好的动机,不会破坏构建,并且可以通过构建过程轮换每个人,这样每个人都可以学会如何工作。

虽然我没有机会做日常搭建,但我非常喜欢它。

还是不服气?看看这里的概要Daily Builds Are Your Friend!!

相关问题