构建管理/持续集成最佳实践

您的团队如何处理构建?
我们使用Cruise Control,但是(由于缺乏知识)我们面临一些问题 – SVN中的代码冻结 – 构建管理
具体来说,在不断检查代码时,如何使特定版本可用?

通常,您能否讨论在发布管理中使用的最佳实践?

我非常惊讶这不是重复,但我找不到另一个。

好的,这是交易。 它们是两个独立但相关的问题。

对于构建管理,关键点在于您应该拥有一个自动,可重复的构建,从头开始重建整个软件集合,并一直到您的可交付配置。 换句话说,你应该每次都有效地建立一个候选版本。 许多项目并没有真正做到这一点,但我已经看到它燃烧了人们(读“被它烧掉了”)太多次了。

持续集成表示,每当代码发生重大更改事件(如签入)时,应尽可能重复此构建过程。 我已经完成了几个项目,每晚都会变成一个构建,因为代码足够大,需要花费几个小时来构建,但理想的是设置构建过程以便有一些自动机制 – 就像一只ant脚本或make文件—只重建受更改影响的片段。

您可以通过某种方式处理提供特定版本的问题,从而保留每个构建的所有受影响工件的确切配置,因此您可以将可重复构建过程应用于您具有的确切配置。 (这就是为什么它被称为“配置管理”。)通常的版本控制工具,如git或subversion,提供了识别和命名配置的方法,以便可以恢复它们; 例如,在svn中,您可以为特定构建构建标记。 您只需要保留一些元数据,以便了解所使用的配置。

您可能希望阅读其中一本“实用版本控制”书籍,当然,关于CI和Cruise Control在Martin Fowler网站上的内容非常重要。

看看持续整合:最佳实践 ,来自Martin Fowler。

好吧,我在一年前找到了一个相关的post ,我参加了。 您可能会发现它也很有用。 以下是我们如何做到这一点。

将post

我们使用Cruise Control作为集成工具。 我们只处理trunk,这是我们案例中的主要Subversion存储库。 当有可能发生复杂的冲突时,我们很少会为新的故事卡拉出一个新的分支。 通常,我们为版本发布提取分支并从中创建构建并将其交付给我们的测试团队。 同时我们继续干线工作,等待测试团队的反馈。 一旦测试完毕,我们就会从分支创建一个标签,这在我们的案例中逻辑上是不可变的。 因此,我们可以随时向任何客户发布任何版本。 如果发布中存在错误,我们不会创建标记,我们会修复分支中的内容。 在将所有内容修复并经过测试团队批准后,我们​​将更改合并回主干,并从特定于该版本的分支创建新标记。

所以,我们的想法是我们的​​分支机构和标签并没有直接参与持续集成。 将分支代码合并回主干会自动使该代码成为CI(持续集成)的一部分。 对于特定版本,我们通常会在分支中执行错误修正,因此我认为它并不真正参与CI过程。 相反,如果我们开始在一个分支中开始制作新的故事卡,那么我们就不会将该分支保持太长时间。 我们尽快将它合并回主干。

准确地说,

  • 当我们计划下一个版本时,我们手动创建分支
  • 我们为发布创建一个分支,并修复该分支中的错误以防万一
  • 在获得所有好处后,我们从该分支创建一个标记,这在逻辑上是不可变的
  • 最后,如果有一些修复/修改,我们将分支合并回主干

发布管理远远超出了持续集成。

在您的情况下,您应该使用Cruise Control自动创建一个标记,这样开发人员可以在进行增量构建时继续编码。

如果你的构建是增量的,那意味着你可以每x分钟触发一次(而不是每次提交,因为如果它们太频繁,如果你的构建太长,它可能没有时间在下一个构建尝试之前完成发生)。 ‘x’应该定制为比编译/unit testing周期更长。

持续集成还应包括自动启动unit testing。

除此之外,完整的发布管理流程将涉及:

  • 在认证服务器上进行一系列部署
  • 完整的认证周期/ UAT(用户验收测试)
  • 非回归测试
  • 性能/压力测试
  • 预生产(和并行运行测试)

在最终投入生产之前。

再次“发布管理”比“持续集成”复杂得多;)

简而言之:创建从主干复制的分支,并在构建服务器上的该分支上构建您的版本。

但是,使用cc.net以完全自动化的方式达到这一点并非易事。 如果你愿意的话,我可以详细介绍一下我们的构建过程,但是对于这个讨论来说,它可能太精细了。

我同意Charlie关于从头开始进行自动,可重复的构建。 但是我们并没有为“持续”构建做任何事情 ,仅适用于夜间,Beta,每周或欧米茄(GA / RTM / Gold)版本。 仅仅因为某些事情(如生成文档)可能需要很长时间,而对于持续构建,您希望为开发人员提供有关构建结果的快速反馈。

我完全同意保留确切的配置,这就是为什么分支发布或标记是必须的。 如果你必须维护一个版本,即你不能只发布另一个trunk版本,那么在发布方法上的分支是要走的路,但是你需要适应合并。

您可以使用Team Foundation Server 2008和Microsoft Studio Team System来完成源代码控制,分支和发布。