2012-02-20 39 views
3

我在一个项目和大约10个构建配置中使用TeamCity 6.5.1。我有一个类似于Core - > Framework - > Apps的依赖链。框架依赖于Core,应用程序依赖于Core和Framework。“触发快照依赖关系中的更改”似乎无法正常工作

我遇到的问题是在核心被触发并成功构建后,框架/应用程序不会被触发。我已经在框架和所有应用程序中选择了“触发快照依赖关系中的更改”,但是即使核心构建是从SVN提交触发的,它们似乎都没有触发。

“触发快照依赖性的变化”不符合我的想法吗?我是否需要将核心(和框架)VCS根添加到框架/应用程序上的VCS触发器上?如果这是我唯一的选择,我想我可以这样做,但似乎是多余的(特别是如果我将来需要调整VCS根路径)。

核心VCS触发:

+:root=MySVNRoot:/Core/** 

框架VCS触发(快照DEP上核心):

[x] Trigger on changes in snapshot dependencies 

+:root=MySVNRoot:/Framework/** 

应用VCS触发(快照DEP上Core和框架)

[x] Trigger on changes in snapshot dependencies 

+:root=MySVNRoot:/Applications/MyApplication/** 

回答

0

决定在框架和应用程序配置上使用“完成构建”触发器。我更喜欢VCS触发器以上述方式工作,但我会一直这样做,直到有人可以建议更好的替代方案(或者如果“Finish Build”触发器真的是是最佳选择)。

框架触发:

VCS trigger 
Finish Build trigger on Core 

应用触发:

VCS trigger 
Finish Build trigger on Framework 
0

对于任何依赖的情况下该功能的使用是snapshot dependencies。 在你的情况下,你应该添加TeamCity快照依赖从Framework到Core,从Apps到Framework。 之后“触发快照依赖关系中的更改”选项将开始工作,在Core上发生任何更改时触发框架和应用程序。

+1

我同意。但是,“触发快照依赖关系中的更改”选项看起来没有正常工作。例如:如果代码在App(依赖于Core和Framework)中进行了更改,那么Core和Framework将在App之前构建。但是,如果Core中发生了某些变化,那么Framework(或应用程序)将不会自动生成。我们正在使用6.5.1,这不是最新版本,但我在变更日志中找不到任何有关依赖性触发器的错误,所以我没有更新过。 – 2012-03-02 18:36:24

0

你的框架VCS触发(快照)应该是相同的核心,您希望它触发时所建核心源改变

+:root=MySVNRoot:/Core/** 

应用VCS触发应当针对核心&框架VCS

+:root=MySVNRoot:/Core/** 
+:root=MySVNRoot:/Framework/** 

TeamCity 7中的这些设置要容易得多

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 

我想在核心的变化触发建立框架,并最终应用程序,但我不希望在框架的改变来触发核心的改变,同时仍触发在Apps中构建。

这听起来像是“触发快照依赖关系中的更改构建”功能,但实际上它的作用是在链的开始处触发构建,而不管该更改发生在哪个项目中:

Change in Apps -> Build Core -> Build Framework -> Build Apps 
Change in Framework -> Build Core -> Build Framework -> Build Apps 
etc... 

,如果你在应用程序改变的东西,就意味着,你会在核心,并通过快照依赖触发一个构建,它最终将建立在链的一切。我认为不适合你的原因是因为该触发器必须在应用程序中设置,在其他任何项目上都没有触发器。

不幸的是,我认为实现我描述的行为的唯一方法是在每个相关项目上都有一个VCS触发器和完成构建触发器,以及一个安静期,因此您可以独立地从链中的某个位置触发构建而不会触发整个构建链。