4

我有一个包含几种构建配置的 TeamCity 项目:

  • 应用程序包,包含各种应用程序组件并从版本控制中的各种子树构建
  • 角色包,将不同配置的应用包组合在一起(应用服务器角色有通用代码+前端,Web服务角色有通用代码+后端等)
  • 回归测试,一系列构建步骤,在相应的测试服务器上部署角色包并运行冗长的 Selenium 测试套件

目标是频繁构建应用程序包,以便我们立即知道单元测试何时发生故障,根据需要构建角色包,以及在有新角色包要测试时尽可能频繁地运行回归测试。但是由于回归测试需要很长时间并且一次只能运行一个回归(它垄断了一组测试服务器),我们总是希望它在开始运行时获取最新的可用包。例如:

3:00 代码签入
3:01 构建应用程序包 (A1)
3:02 应用程序包 A1 完成
3:02 构建角色包(R1)
3:03 角色包 R1 完成

3:04 R1 开始回归

3:10 代码签入
3:11 构建应用程序包 (A2)
3:12 应用程序包 A2 完成
3:12 构建角色包(R2)
3:13 角色包 R2 完成

3:20 代码签入
3:21 构建应用程序包 (A3)
3:22 应用程序包 A3 完成
3:22 构建角色包(R3)
3:23 角色包 R3 完成

3:30 R1 回归完成
** R2 的回归永远不会运行 **
3:30 R3 开始回归

到目前为止,我已经使用工件依赖项和构建触发器实现了这一点:

  • 应用程序包由计划触发器触发,仅限于具有 VCS 触发规则的相关源代码。他们没有 TeamCity 依赖项。
  • 角色包由指向所有相关应用程序包的完成构建触发器触发。每个都有对相关应用程序包的工件依赖项(最后一次成功构建)。
  • 回归测试由指向所有角色包的完成构建触发器触发,并限制为在单个代理上运行。它对所有角色包都有工件依赖项。

当只重建一个角色时,这可以很好地工作。但是,当多个角色同时更改时,回归测试会在第一个角色重建后立即开始运行,然后在该测试完成之前不会获取其余角色。我希望在重建最后一个更改的角色时开始运行回归。(注意:角色比代理多,并且回归在与包构建不同的代理上运行。)

快照依赖项听起来像是我需要的工具......但我的理解是它们强制所有依赖配置从同一个 VCS 修订版运行,并且我想避免在其代码未更改的情况下强制重建包。如果今天唯一的变化是在只影响角色 R 的包中,那么角色 S/T/U 不应该重建,它们的依赖关系也不应该重建。这可能吗?


编辑:我正在运行 TeamCity 7.1.1。

4

1 回答 1

1

我认为快照依赖Do not run new build if there is a suitable oneOnly use successful builds from suitable ones工件依赖以及build from the same chainset 将做你想要的。这种配置应该意味着它认为没有必要重建,因为没有任何改变,请注意它仍然会触发构建,但它所做的只是评估没有任何事情可以继续构建链。

注意:您没有提及您正在运行哪个版本,但我相信这在 6.5 中无法正常工作,但在 7.1 中确实(更理想)工作。

于 2012-12-04T21:03:15.827 回答