【问题标题】:How to build a project in teamcity after multiple other builds have finished and not trigger the dependency chain?多个其他构建完成后如何在teamcity中构建一个项目并且不触发依赖链?
【发布时间】:2016-12-24 04:38:25
【问题描述】:

我的问题与Trigger subsequent build once after multiple parallel builds in TeamCity 有关,但我遇到了问题,所以在这里发布。

以下是我的设置。我正在尝试创建一个链,这样当我运行 A 时,整个链都会运行。

A(根项目)- B(依赖于 A 的快照 + 在 A 上完成构建触发器)-(依赖于 B 的快照)聚合项目。

A(根项目)-c(依赖于A的快照+在A上完成构建触发器)-(依赖于C的快照)聚合项目。

快照依赖并没有真正做任何事情(没有快照,我在 A 使用虚拟构建配置),我必须创建它,因为我想使用 %dep 将动态值从 A 向下传递仅使用 Finish Build 触发器无法实现。

现在,我还需要能够独立触发 B(在这种情况下,我不需要聚合,仅在启动根项目 A 时才需要),这样 C 就不会被触发,反之亦然,但使用当前设置当我触发 B 时,A 被触发(由于快照依赖性,然后触发聚合,然后 C 进入队列,因为聚合也是依赖于 C 的快照)。我是 Teamcity 的新手,所以我可能做错了。任何帮助表示赞赏。

【问题讨论】:

  • 除了完成构建触发器(这里的最终问题)之外,您是否有任何自动触发器,如果​​有,它们在哪里。您能否提供更多关于每个构建配置的详细信息?
  • 感谢您的回复!不,我没有自动触发器。我们每周两次触发该项目。这是一个测试设置。我们有单独的开发设置。我只需要在开发团队要求我运行 E2E 测试时触发设置。这就是我必须为前向链接设置 Finish build 并为传递动态变量设置快照依赖的原因,这样我就可以从根级别开始,并从聚合项目中的不同模块累积所有测试结果。

标签: teamcity-9.0 build-chain


【解决方案1】:

为了实现你的目标,你需要:

  1. 删除完成构建触发器
  2. 确保存在来自 B => A 和来自 C => A 的快照依赖项
  3. 添加对 B 和 C 具有快照依赖关系的新构建 (D)。当您希望 A、B 和 C 运行时,这将是触发的构建

触发 C 只会导致 A 和 C 运行,触发 B 只会导致 A 和 B 运行。

如果您需要有关配置方面的帮助,请告诉我

希望对你有帮助

【讨论】:

  • 谢谢。我会试试这个。我错过了我在下面列出的原始帖子中的一个关键要求。我需要能够: 1. 触发 A,触发 B,触发 C。动态值需要从 A 传递到 B 和 B 到 C。(或任何其他方式,我只需要确保所有三个项目都获得传递的值) 2. 有时直接触发 B,动态值需要从 B 传递到C。对不起,我之前提到B不需要触发C。 3.有时,直接触发C。这不应该触发其他任何事情。
  • 我的主要问题也是动态值。据我所读,动态值不能沿链向上传播。例如,如果我配置了对 B 和 C 具有快照依赖关系的 D。所有三个构建都会触发依赖关系,但我的动态值不会传递给 B 和 C,然后传递给 A。请确认这是否正确理解。跨度>
  • 如果您配置了 D,动态值仍然从 A 开始,因为这实际上是基于快照依赖项运行的第一个构建配置,因此没有关于值“向上”移动的问题,因为构建配置不要按那个顺序运行。关于 B 触发 C,这听起来很令人费解,也许聊天是解决这个问题的更好方法,而不是通过 cmets。
  • 再次感谢。正如你所建议的,我现在已经删除了完成触发器。该链仅由依赖关系维护。我已经使用了 reverse.dep.*. 并在 A 和 B 中进行了配置。这样,每当我在 A 中为此赋值时,B 和 C 都会更新。当我在 B 中赋值时,只有 C 得到更新。我的要求得到满足。我能够在依赖链中向上传递值。但是正如您所提到的,构建配置不能以这种方式工作。我也会尝试一下,看看是否根本不需要 reverse.dep,而应该在 A 和 B 中配置 %dep。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 2013-10-09
  • 2015-11-27
相关资源
最近更新 更多