【问题标题】:Enterprise CI (SOA / .Net)企业 CI (SOA / .Net)
【发布时间】:2026-01-11 07:40:02
【问题描述】:

我应该如何处理 SOA 平台的持续集成?

让我解释一下设置。我们有 30 个 Web 服务解决方案和 5 个客户端解决方案,这些 Web 服务相互依赖(参考合同 dll),并且还共享一些常用的实用程序 dll。

到目前为止,我们对 CruiseControl.net(37 个 CC 项目、5 个客户端、30 个 WS、1 个实用程序项目、1 个集成测试项目)感到满意,所有这些都相互独立地构建和测试。在每次部署之前,我们会以明确定义的顺序触发所有项目的构建,这使我们能够准备好部署工件以部署到大约 7 个不同的服务器。

到目前为止,我们还没有任何版本的服务,每次部署都会部署完整的 shebang。

我们最近投入生产,现在我们需要扩展代码,以便任何进一步的开发都不会破坏我们对现在生产中的内容进行修补的能力。

此外,我们还想分头工作,产生单独的开发工作,创建新客户端或向现有客户端/服务添加主要功能,我认为我们需要以下内容

  • 1 个 CI 服务器“及时冻结”在一个稳定的分支上(在任何给定时间都在生产中)
  • 1 个 CI 服务器,用于针对小问题进行常规开发/生产上的润色(主干,发布周期 = 1 个月)
  • 每个开发工作 1 个 CI 服务器(发布周期 = 3-6 个月)
  • 这样我们总是可以毫不费力地修复 prod,我们将继续每月根据用户反馈改进 prod,并且我们可以在 SOA 堆栈上推出新的主要工作,而不会干扰前两个(直到我们合并代码是:))

    问题是:我们应该为 CI 使用哪些工具? 我看到的选项:

    1. 在我们的 ccnet 实例中重复项目
    2. 复制 ccnet:xcopy CCnet 到构建机器上的 X 个位置,在不同端口上设置新服务,调整 svn 源,构建位置和部署工件位置
    3. 使用更适合这些问题的不同 CI 服务器

    1:我不喜欢(笨拙,什么时候是绿色的,所有团队使用同一个池)

    2:我可以看到我们这样做,但感觉有点笨拙

    3:我们应该使用哪个服务器?到目前为止,我已经听说过 Hudson 和 Cruise 这两个名字,这些都适用吗?

    4:我的想法完全错了吗?你们其他人如何在旨在支持许多团队开发工作的 SOA 堆栈上执行 CI?

    【问题讨论】:

      标签: .net continuous-integration soa


      【解决方案1】:

      我会将Teamcity 加入其中。它使用构建代理网格,可以为您提供更多功能以及执行同时构建的能力。

      鉴于您的项目数量众多,在任何特定构建服务器的同一实例中复制您的构建 3 次可能会很困难。这将是在同一页面上跟踪 100 多个项目。

      选项 2 绝对可行,尽管我可能会考虑利用虚拟机,创建一个构建服务器映像,然后托管三个实例,这将产生三个不错的 url,而无需使用不同的端口以及三个相同的设置来维护。

      另一个考虑;也许您可以通过对相关组件进行分组并使用 nant\msbuild\ruby\powershell 脚本将 37 多个项目折叠成更少的 ccnet 构建。如果您可以减少到 15 个构建,那么在同一个服务器实例中运行所有三个变体变得更加可行。

      【讨论】:

      • 折叠项目听起来很有趣,但是我必须在 svn 中重新组织代码,对吧?这样分组的解决方案就有一个公共的 svn 根目录,我可以将 CI 服务器指向,所以任何服务中的任何修改都会触发构建?或者 CI 服务器是否支持有多个 svn 根来检查修改?
      • 我不认为 CruiseControl 支持多个 SVN 根,但我知道 Teamcity 确实支持,因为我一直使用该功能。不确定哈德森。我绝对不会去重新组织你所有的项目目录的麻烦!