【问题标题】:How to make a TeamCity build wait until all of its artifact dependencies are rebuilt?如何让 TeamCity 构建等到其所有工件依赖项被重建?
【发布时间】:2012-12-04 20:55:40
【问题描述】:

我有一个包含几种构建配置类型的 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 依赖项。
  • 角色包由指向所有相关应用程序包的完成构建触发器触发。每个都对相关应用程序包有工件依赖项(最后一次成功构建)。
  • 回归测试由指向所有角色包的完成构建触发器触发,并限制为在单个代理上运行。它对所有角色包都有工件依赖项。

当只重建一个角色时,这已经足够好用了。但是,当多个角色同时发生变化时,回归测试会在 first 角色重建后立即开始运行,然后在该测试完成之前不会选择其余角色.我希望在重建 last 更改的角色时开始运行回归。 (注意:角色比代理多,并且回归在与包构建不同的代理上运行。)

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


编辑:我正在运行 TeamCity 7.1.1。

【问题讨论】:

  • 你最后搞定了吗?我们有类似的情况,目前看来我唯一的选择是编写一些内置此逻辑的代码(例如,使用 REST API 的自定义触发器或 PowerShell 脚本)

标签: dependencies teamcity teamcity-7.1


【解决方案1】:

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

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

【讨论】:

  • 听起来我还需要为每个项目设置结帐规则(而不是只使用触发规则),否则 TeamCity 将无法检测到没有任何变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多