您的持续集成如何运作?

时间:2009-07-20 06:12:36

标签: continuous-integration

我正在构建一个CI服务器,我非常希望能够获得真实的体验,并了解人们使用的是什么。

那么,你的构建过程是什么?是否有类似的东西:

  • 每小时进行一次代码和测试,
  • 另一个日常用于构建msi和代码指标,
  • 等,

此外,您的完整构建过程使用了什么?你使用的是:

  • team city,
  • 的msbuild,
  • nunit - 用于测试,
  • ncover - 用于测试覆盖率,
  • ndepend - 代码指标,
  • sandcastle - 代码注释的文档,
  • testcomplete - 用于QA测试,
  • 等?

分享! ;)

8 个答案:

答案 0 :(得分:3)

我们在最近的CITCON北美(持续集成和测试会议)上进行了类似的对话,在那里我们分享了我们的经验,并试图整理从简单的CI到非常内置的CI和发布的路线图系统

原始会议记录为here。随着Flickr photostream。 城市代码博客也提供cleaned up version

澳大利亚人在CITCON布里斯班重温了这个话题,其中pencast可用

希望其中一些资源有用。

答案 1 :(得分:2)

对于Java,我们有一个Hudson实例检查SVN存储库中的提交,对于每个提交都有一个构建,其中所有内容都已编译,所有测试单元都使用{{}运行3}}。此外,Hudson连接到Maven2的实例,它告诉我们关于编码风格和测试覆盖率的统计数据。

Sonar

甜蜜:))

答案 2 :(得分:2)

在我之前的项目中,我们曾经有两个luntbuild服务器和一个SVN服务器。

第一个luntbuild机器用于构建项目 - 每次提交增量构建+单元测试,然后在晚上清理构建+单元测试+完整安装包装。

第二台luntbuild机器被用作集成测试的测试台。一旦第一台机器完成夜间安装,它就会选择它,将其部署在自身上并运行全套集成测试(基于junit的swing gui驱动程序),所以每天早上测试工程师都会得到一个安装一份完整性检查报告,以便他们决定是否要接受新版本。

答案 3 :(得分:2)

我们使用CruiseControl.net作为我们的CI服务器与nant结合使用。大多数构建(我们有大约30个构建)都会在更改时触发。一些不那么重要的重型构建仅在每晚触发一次,这也适用于维护大部分正常构建的维护构建。

对于我们的C / C ++代码构建,我们使用的是专有构建系统,它能够将代码构建分发给公司中的每台机器(如IncrediBuild,但更灵活)。对于我们的C#版本,我们直接调用devenv.com,但我们使用NUnit来运行单元测试。我们的C ++单元测试使用我们自己的框架,运行它们导致xml与NUnit非常相似。对于一些额外的代码检查,我们每晚运行pclint。目前还没有完成代码覆盖,这有点遗憾。

我们也在使用该系统来准备我们产品的总决赛。这只是第一步,之后仍然需要一些手动操作。

答案 4 :(得分:2)

构建进程 - 我们有4个当前活动的大型代码库分支,我们不断运行构建。对于每个分支,我们将构建分为两个阶段:

  • 快速持续集成构建,在每次提交后运行,以便我们能够尽快获得有关损坏代码或破坏测试的反馈
  • 每天运行两次的全自动构建,确保代码从头开始构建。

我们的构建过程由Zed Builds And Bugs协调,包括Windows,Linux,AIX,HP和Solaris中的Ant,Make,Maven,JUnit,Findbugs,shell脚本(历史)。

我们目前正在进行更多历史趋势和统计数据的汇总,以便我们可以从更高层面看到开发过程的进展情况。

答案 5 :(得分:0)

在我的情况下(内部设计/构建/支持的CB系统),在给定CB配置所针对的树中提交到VCS会自动对CB请求进行排队(在CB运行时到达的多个请求被折叠到一,当前CB过程完成后将立即运行。)

每个CB实例通过执行配置要执行的构建和测试步骤来响应CB请求(将它们与所有CB实例共享的分布式服务器的“云”并行),记录构建和测试结果,偶尔(不是经常配置频率)启动“重度测试”(可能会运行很长时间并且不会阻止即将到来的CB请求 - 重度测试完全分开,尽管日志完全清楚地反对他们跑了哪个。)

“同步到头”(其他VCS中的“head”将是“trunk”;-),对于不是CB跟踪的树的一部分的依赖,可能每次都会发生(这些将是轻量级的,非 - 生产关键或实验性构建),或仅在非常明确的集成请求上(对于生产关键的构建/项目的“发布分支”,或具有中间容差的另一个极端)。

我认为,不是发布工程实践的顶点,但在其选择范围内,它对我们来说非常有效,适用于各种各样的关键性,依赖性沉重和& c; - )的项目。 / p>

答案 6 :(得分:0)

Jenkin是连续集成(CI)的最佳工具。 CI只是经常集成存储库(SCM)中的代码。此外,将SCM集成到jenkins中以构建代码。

您可以在jenkins中设置轮询频率。这样,无论何时在SCM中进行更改并提交,Jenkins都会尝试进行构建。这种方式是有效的..持续整合。

答案 7 :(得分:0)