0

我对构建链中的构建计划有疑问,这真的让我很困扰。

我有一个简单的构建A -> B

  • A 非常快(不到一分钟)——它基本上是从生产系统中检索数据库。在处理完成之前,无法判断生成的工件是否与先前的结果相同。目前构建预定的时间。
  • B 非常慢(5-6 小时)——它将 A 的输出加上许多其他来源的输出组合成大量的工件。目前它对 A 有一个快照依赖,也对其他源有依赖。

除非需要,否则我想避免运行 B - 即如果 B 的任何输入已更改 - 但我该怎么做?

如果 A 检测到结果未更改,我可以失败/取消 A,但这将导致 B 出现“快照依赖失败”,因此如果 B 的任何其他其他输入源发生更改,它将不会重建结果...

有什么方法可以停止或中止 A 的构建,以免触发 B 的构建?

编辑:我(可能)有一个想法:我可以让 A 在 SCM 中检查生成的工件 - 如果它与以前的版本不同 - 并让它驱动 B 的触发器 - 它已经有许多其他来源单片机。它不会是同一个构建链的一部分——据我所知——但它是下一个最好的东西......

4

2 回答 2

1

我不这么认为。TeamCity 中的构建链是静态的。

有两种可能的解决方法

  1. 写一个插件来处理这种情况。这将是一个服务器端插件,当 B 排队时,它会在buildTypeAddedToQueue(SQueuedBuild queuedBuild)事件中启动。它会做一些环顾四周(比较工件)并立即从队列中删除 B 。
    • 我相信这会表现得好像 B 已排队然后被用户出队。即它并不像看起来那样难懂——从队列中删除构建是受支持的 TC 操作。
    • 它可能比你希望的更费力......
  2. 在 B 中处理此问题。
    • 这可能要简单得多,但我假设您想避免这种情况。

我认为您理想情况下希望在 A 中处理此问题,因此#2 不是一个选项。#1很接近,当然它涉及更多。

于 2015-09-29T16:29:34.387 回答
0

如果 A 的新潜在构建与最近的一些相同,我想它应该跳过 A 重建并使用最近的重建。例如,请求具有相同 VCS 修订版和相同设置的依赖构建 A 不应再次触发构建。

于 2015-09-29T17:46:03.543 回答