我正在使用TeamCity 6.5.1一个项目和大约10个构建配置。我有一个类似于Core的依赖链 - >框架 - >应用。 Framework依赖于Core,而Apps依赖于Core和Framework。
我遇到的问题是,在核心被成功触发和构建后,框架/应用程序不会被触发。我在框架和所有应用程序中选择了“触发快照依赖项更改”,但即使核心构建是从SVN提交触发的,它们也似乎都没有触发。
“触发快照依赖项中的更改”是否不像我认为的那样工作?我是否需要将核心(和框架)VCS根添加到框架/应用程序上的VCS触发器?如果这是我唯一的选择,我想我可以这样做,但它似乎是多余的(特别是如果我将来需要调整VCS根路径)。
核心VCS触发器:
+:root=MySVNRoot:/Core/**
Framework VCS Trigger(Core上的快照dep):
[x] Trigger on changes in snapshot dependencies
+:root=MySVNRoot:/Framework/**
App VCS触发器(核心和框架上的快照部署)
[x] Trigger on changes in snapshot dependencies
+:root=MySVNRoot:/Applications/MyApplication/**
答案 0 :(得分:0)
决定在框架和应用程序配置上使用“Finish Build”触发器。我希望VCS触发器能够以上述方式工作,但是我会继续这样做,直到有人可以提出更好的替代方案(或者如果“完成构建”触发器确实 是最佳选择)。
框架触发器:
VCS trigger
Finish Build trigger on Core
应用触发器:
VCS trigger
Finish Build trigger on Framework
答案 1 :(得分:0)
对于任何依赖性情况,要使用的功能是snapshot dependencies。 在您的情况下,您可能应该从Framework到Core以及从Apps到Framework添加TeamCity快照依赖项。 之后,“快照依赖关系中的更改触发器”选项将开始在Core中的任何更改上触发Framework和Apps。
答案 2 :(得分:0)
您的Framework VCS触发器(快照)应该与核心相同,您希望它在核心源更改时TRIGGER构建
+:root=MySVNRoot:/Core/**
App VCS Trigger应该针对Core&框架VCS
+:root=MySVNRoot:/Core/**
+:root=MySVNRoot:/Framework/**
TeamCity 7中的这些设置更容易
答案 3 :(得分:0)
"触发基于快照依赖关系变化的构建"特征排序与听起来相反。对我来说,期望的结果是这样的:
Apps depends on Framework depends on Core
Change in Framework -> Build Framework -> Build Apps
Change in Apps -> Build Apps
Change in Core -> Build Core -> Build Framework -> Build Apps
我希望Core中的更改能够触发Framework的构建,最终触发Apps,但我不希望框架中的更改触发Core的更改,同时仍然触发应用程序中的构建。
这听起来像"触发快照依赖关系变化的构建"功能可以,但实际上它所做的是在链的开头触发构建,无论发生了哪个项目的变化:
Change in Apps -> Build Core -> Build Framework -> Build Apps
Change in Framework -> Build Core -> Build Framework -> Build Apps
etc...
这意味着如果您在Apps中更改某些内容,您将触发Core中的构建并通过快照依赖项,它最终将构建链中的所有内容。我认为不适合你的原因是因为必须在Apps中设置触发器,而在任何其他项目中都没有触发器。
不幸的是,我认为实现我所描述的行为的唯一方法是在每个依赖项目上都有一个VCS触发器和完成构建触发器,以及一个安静的时间段,这样你就可以从链中间的某个位置独立触发构建触发整个构建链。