Dependencies 如何使TeamCity构建等到其所有工件依赖项都被重建?

Dependencies 如何使TeamCity构建等到其所有工件依赖项都被重建?,dependencies,teamcity,teamcity-7.1,Dependencies,Teamcity,Teamcity 7.1,我有一个TeamCity项目,有几种类型的构建配置: 应用程序包,包含各种应用程序组件,并从版本控制中的各种子树构建 角色包,以不同配置将应用程序包组合在一起(应用程序服务器角色具有通用代码+前端,web服务角色具有通用代码+后端,等等) 回归测试,一系列构建步骤,在相应的测试服务器上部署角色包并运行冗长的Selenium测试套件 我们的目标是经常构建应用程序包,以便在单元测试中断时立即知道,根据需要构建角色包,并且在有新角色包要测试时尽可能经常地运行回归测试。但是,由于回归测试需要很长时间

我有一个TeamCity项目,有几种类型的构建配置:

  • 应用程序包,包含各种应用程序组件,并从版本控制中的各种子树构建
  • 角色包,以不同配置将应用程序包组合在一起(应用程序服务器角色具有通用代码+前端,web服务角色具有通用代码+后端,等等)
  • 回归测试,一系列构建步骤,在相应的测试服务器上部署角色包并运行冗长的Selenium测试套件
我们的目标是经常构建应用程序包,以便在单元测试中断时立即知道,根据需要构建角色包,并且在有新角色包要测试时尽可能经常地运行回归测试。但是,由于回归测试需要很长时间,并且一次只能运行一个回归(它垄断了测试服务器集),因此我们总是希望它在开始运行时获取最新的可用包。例如:

3:00 code checked in 3:01 build app package (A1) 3:02 app package A1 finishes 3:02 build role package (R1) 3:03 role package R1 finishes 3:04 regression starts for R1 3:10 code checked in 3:11 build app package (A2) 3:12 app package A2 finishes 3:12 build role package (R2) 3:13 role package R2 finishes 3:20 code checked in 3:21 build app package (A3) 3:22 app package A3 finishes 3:22 build role package (R3) 3:23 role package R3 finishes 3:30 regression finishes for R1 ** regression never runs for R2 ** 3:30 regression starts for R3 3:00代码已签入 3:01构建应用程序包(A1) 3:02应用程序包A1饰面 3:02生成角色包(R1) 3:03角色包R1完成 3:04 R1开始回归 3:10代码已签入 3:11构建应用程序包(A2) 3:12 app包A2饰面 3:12生成角色包(R2) 3:13角色包R2完成 3:20代码已签入 3:21构建应用程序包(A3) 3:22应用程序包A3饰面 3:22生成角色包(R3) 3:23角色包R3完成 R1的3:30回归结束 **R2永远不会运行回归** 3:30 R3开始回归 到目前为止,我已经使用工件依赖项和构建触发器实现了这一点:

  • 应用程序包由计划触发器触发,仅限于使用VCS触发器规则的相关源代码。他们没有团队城市依赖关系
  • 角色包由指向所有相关应用程序包的完成生成触发器触发。每一个都对相关应用程序包(上次成功构建)具有工件依赖性
  • 回归测试由指向所有角色包的完成构建触发器触发,并限制在单个代理上运行。它对所有角色包都有工件依赖关系
当只重建一个角色时,这就足够了。但是,当多个角色同时更改时,回归测试会在第一个角色重建后立即开始运行,然后在测试完成之前,其他角色不会被选中。我希望在重建上次更改的角色时开始运行回归。(注意:角色比代理多,并且回归运行在与包构建不同的代理上。)

快照依赖项听起来像是我需要的工具。。。但我的理解是,它们强制所有依赖配置从相同的VCS版本运行,我希望避免在代码没有更改的情况下强制重新生成包。如果当前唯一的更改发生在仅影响角色R的包中,则不应重建角色S/T/U,也不应重建其依赖关系。这可能吗



编辑:我正在运行TeamCity 7.1.1。

我认为,如果有合适的快照依赖项,则具有
的快照依赖项不会运行新版本,并且
仅使用来自合适的快照依赖项的成功版本
以及来自同一链的
版本集的工件依赖项将满足您的要求。此配置应该意味着它认为不需要重建,因为没有任何更改,请注意,它仍然会触发构建,但它所做的只是评估没有任何操作,从而继续构建链


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

听起来我还需要为每个项目设置结帐规则(而不是只使用触发器规则),否则TeamCity将无法检测到没有任何更改。您最终成功了吗?我们有类似的情况,目前看来我唯一的选择是编写一些内置了此逻辑的代码(例如,自定义触发器或使用REST API的PowerShell脚本)