在我看来,快照依赖的功能完全取代了TeamCity中完成构建触发器的功能。任何人都可以解释这些方法的效果,如果它们导致不同的链行为?例如,如果我有一个A-> B的构建链
链条在这三种设置之间的实际行为有何不同?
据我所知,可以将Snapshot Dependency视为所有dependees的“AND”操作,而Finished Build Trigger在dependees之间的操作类似于“OR”。但在顺序链的背景下,有什么区别吗?
谢谢, 斯科特
答案 0 :(得分:11)
“Snapshot Dependency”和“Finished Build”触发器非常不同。一个基本上是“推”操作,而另一个是“拉”操作。
设置1: 如果我构建了配置 A 和 B ,其中 B 在 A 上有“完成构建”触发器,那么相反的行为是真的。触发 B 对 A 没有影响,但触发 A 会在完成后有效触发 B 。< / p>
设置2: 如果我的设置完全相同,但是 B 对 A 有快照依赖关系,那么每当 B 被触发时, A 在运行 B 之前,strong>将首先运行,或者至少检查是否需要运行。如果仅触发 A ,则不会触发 B 。
设置3: 设置3略有不同,因为它不依赖于“完成构建”触发器或快照依赖性。它还取决于初始触发器(VCS,预定或其他)。例如,如果您在 A 上有VCS触发器,而 B 在 A 上同时具有“完成构建”触发器和“快照依赖项” ,然后你有效地获得了安装程序1的行为。 A 将在VCS更改时触发, B 将在 A 之后触发(使用相同的功能)快照)。实际上,如果没有快照设置,则无法保证 B 将使用与 A 相同的快照,这可能是您想要的,也可能不是。
所以一般来说,当你想要一个“从左到右”的触发过程时,你可以使用BOTH完成的构建触发器和快照依赖来保证构建抵押品的神圣性。
另一方面,如果您在 B 上设置了初始触发器(VCS或预定或其他),那么“完成构建”触发器有点无效,因为 B 将始终首先触发(但不会运行),然后它将触发所有依赖项并在完成后自动运行。
希望有所帮助。谢谢!答案 1 :(得分:3)
正如你所说,如果配置快照依赖于多个其他配置(Z快照 - 取决于X和Y),则会有很大差异。但你对此并不感兴趣......
确实可以说,在平凡的A-> B场景中,设置1 ... 3接近等效。当然,仅当触发A和B的事件是一对一的时(例如,A和B都在同一VCS根上触发;或者它们使用不同的VCS根但仅手动触发)。如果这是真的,那么您的A-> B链是非常重要的,并且可能在单个构建配置中实现。
浮现在脑海中的其他微妙差异:
将参数传递给链。
%foo%
并使用%dep.A.foo%
在B中重用它。这非常方便,因为您无需担心保持A和B之间%foo%
的值同步。%foo%
的A-> B链(您将在“运行...”对话框中指定值)。调度。
不同的VCS根源。
一般来说,我同意快照依赖关系(设置2)的“拉”性质更具吸引力。如果需要,可以与触发器结合使用(设置3)。