Continuous integration 设置集成测试服务器的最佳方法是什么?

Continuous integration 设置集成测试服务器的最佳方法是什么?,continuous-integration,integration-testing,Continuous Integration,Integration Testing,设置集成服务器时,我对使用多个任务来完成构建的最佳方法表示怀疑。在一个大任务中设置所有任务或创建小的依赖任务的最佳方法是什么?我使用TeamCity和nant构建脚本。TeamCity可以轻松设置CI服务器部件,而nant构建脚本可以轻松完成许多与报表生成相关的任务 下面是我写的一篇关于将CI与CruiseControl.NET结合使用的文章,它的注释中有一个nant构建脚本,可以在项目中重复使用: 我肯定会把工作分解。很可能您会在构建中进行更改,如果您有较小的任务,而不是搜索一个单一的构建,那

设置集成服务器时,我对使用多个任务来完成构建的最佳方法表示怀疑。在一个大任务中设置所有任务或创建小的依赖任务的最佳方法是什么?

我使用TeamCity和nant构建脚本。TeamCity可以轻松设置CI服务器部件,而nant构建脚本可以轻松完成许多与报表生成相关的任务

下面是我写的一篇关于将CI与CruiseControl.NET结合使用的文章,它的注释中有一个nant构建脚本,可以在项目中重复使用:


我肯定会把工作分解。很可能您会在构建中进行更改,如果您有较小的任务,而不是搜索一个单一的构建,那么跟踪问题会更容易


无论如何,你应该能够从较小的部分创建一个大作业。

你肯定想分解任务。下面是CruiseControl.NET配置的一个很好的示例,每个步骤都有不同的目标(任务)。它还使用一个common.build文件,该文件可以在项目之间共享,而无需太多定制

G'day

在您谈论集成测试时,我的一个重要(显而易见)技巧是使测试服务器的构建和配置尽可能接近部署环境

</thebloodyobvious> (-:
(-)
干杯,
Rob

我喜欢的方法是以下设置(实际上假设您在.NET项目中):

  • CruiseControl.NET
  • 每个单独步骤的NANT任务。NANT.Contrib用于替代CC模板
  • NUnit运行单元测试
  • NCover执行代码覆盖
  • FXCop用于静态分析报告
  • 源代码管理的Subversion
  • CCTray或所有开发框上的类似工具,以获取构建和故障等通知
在许多项目中,您会发现,当某人签入时,会发生不同级别的测试和活动。有时,这些测试和活动会随着时间的推移而增加,以至于在生成之后很长一段时间,开发人员才能看到他们是否通过签入破坏了生成

在这些情况下,我要做的是创建三个构建(或者两个):

  • CI构建由签入触发,并执行干净的SVN获取、构建和运行轻量级测试。理想情况下,您可以将这一过程控制在几分钟或更短的时间内
  • 一个更全面的构建,可以是每小时一次(如果更改),它与CI的功能相同,但运行更全面、更耗时的测试
  • 一个通宵构建,它可以完成所有工作,还可以运行代码覆盖率和程序集的静态分析,并运行任何部署步骤来构建每日MSI包等
任何CI系统的关键在于它需要有机并不断调整。CruiseControl.NET有一些很棒的扩展,可以记录和图表构建时间等步骤,让您进行历史分析,从而允许您不断调整构建以保持快速。管理者发现这是很难做到的o接受一个构建框可能会让你忙碌五分之一的工作时间,只是为了让它停止运转。

我们使用,将构建分解为离散的步骤。在以足够的粒度分解构建步骤和作为一个完整的单元之间,可以找到一种平衡

例如,在我目前的职位上,我们在各自的平台上为我们的每个平台(Mac、Linux、Windows)构建子部分。然后,我们有一个单独的步骤(包含几个子步骤)将它们编译成最终版本,最终将在最终发行版中结束

如果这些步骤中有什么地方出了问题,那么很容易诊断

我的建议是在白板上尽可能模糊地写下步骤,然后以此为基础制定步骤。在我的情况下,这将是:

  • 构建插件块
  • 为Mac编译
  • 为PC机编译
  • 为Linux编译
  • 制作最终插件
  • 运行插件测试
  • 构建中间IDE(我们必须引导构建)
  • 构建最终IDE
  • 运行IDE测试

  • 将任务分解为离散的目标/操作,然后使用更高级别的脚本将它们适当地结合在一起

    这使您的构建过程更容易为其他人理解(您正在边做边记录,以便团队中的任何人都能了解它,对吗?),并增加了重用的可能性。您可能不会重用高级脚本(虽然如果您有类似的项目,这可能是可能的),但您肯定可以重用(即使是复制/粘贴)离散操作也相当容易

    以从存储库获取最新源代码为例。您需要使用一些日志语句对检索代码的任务/操作进行分组,并引用适当的帐户信息。这是一种很容易从一个项目重用到下一个项目的方法

    对于我的团队环境,我们使用NAnt,因为它在开发机器(我们在其中编写/调试脚本)和CI服务器(因为我们只是在干净的环境中执行相同的脚本)之间提供了一个公共脚本环境.我们使用Jenkins来管理构建,但在其核心,每个项目只是调用相同的NAnt脚本,然后我们处理结果(即,归档构建输出,标记失败测试等)