6

我收集了超过 150 个项目,将它们重新配置并优化为多个 TeamCity 配置,以及多个构建代理,以尝试提高我们目前以高度顺序方式构建的构建服务器性能。

技术(Web、dotNet、VB6 和 COM+)和系统架构的混合意味着现在可以并行运行各种步骤(配置),但需要进一步整合。

这是一个非常简化的依赖场景,但代表了我们遇到的一个问题......

A -> B -> Collate (-> Deploy)
A -> C -> Collate (-> Deploy)

问题是,如果对 A 进行更改,它将导致 B 和 C 都触发,这将导致 Collat​​e(和 Deploy)步骤运行两次,尽管这是 A 中的常见触发器。正如我所说,这是对近 20 种实际配置的简化和频繁的重建正在影响速度的提高。

任何人都可以提出任何方法来确定 B 和 C 都将作为 A 的结果被触发的事实,并使 Collat​​e 步骤在触发 Collat​​e 步骤之前等待 B 和 C 完成?显然,对 B 或 C 的更改应该能够独立触发 Collat​​e。

4

1 回答 1

14

我是 TeamCity 的新手,但我相信这就是您所需要的:

  • A:没有触发器或依赖项
  • BC:没有触发器,快照依赖于A
  • Collate: VCS 触发器、快照依赖BC

使用该设置,VCS 单次推送将导致:

  • A恰好是,BC的一个构建Collate
  • A之前BC
  • BC在之前建造Collate
  • 全部从 VCS 中的同一点构建

如果您想将工件沿链传递,那么您还需要定义工件依赖项。

如果不同的构建使用不同的 VCS 存储库,那么您仍然不应将 VCS 触发器设置为A,BC; 相反,您在 VCS 触发器上为Collate.

于 2013-12-12T16:30:07.810 回答