Continuous integration &引用;快照依赖项发生更改时触发”;似乎工作不正常

Continuous integration &引用;快照依赖项发生更改时触发”;似乎工作不正常,continuous-integration,teamcity,Continuous Integration,Teamcity,我将TeamCity 6.5.1用于一个项目和大约10个构建配置。我有一个类似于核心->框架->应用程序的依赖链。框架依赖于核心,应用程序依赖于核心和框架 我遇到的问题是,在核心被触发并成功构建之后,框架/应用程序没有被触发。我在框架和所有应用程序上选择了“快照依赖项更改时触发”,但即使核心构建是从SVN提交触发的,它们似乎都不会触发 “快照依赖项更改时触发”是否不像我认为的那样工作?我是否需要将核心(和框架)VCS根添加到框架/应用程序上的VCS触发器中?如果这是我唯一的选择,我想我可以这样做

我将TeamCity 6.5.1用于一个项目和大约10个构建配置。我有一个类似于核心->框架->应用程序的依赖链。框架依赖于核心,应用程序依赖于核心和框架

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

“快照依赖项更改时触发”是否不像我认为的那样工作?我是否需要将核心(和框架)VCS根添加到框架/应用程序上的VCS触发器中?如果这是我唯一的选择,我想我可以这样做,但这似乎是多余的(特别是如果我将来需要调整VCS根路径)

核心VCS触发器:

+:root=MySVNRoot:/Core/**
框架VCS触发器(内核上的快照部门):

应用程序VCS触发器(核心和框架上的快照部门)

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

框架触发器:

VCS trigger
Finish Build trigger on Core
VCS trigger
Finish Build trigger on Framework
应用程序触发器:

VCS trigger
Finish Build trigger on Core
VCS trigger
Finish Build trigger on Framework

对于任何依赖项情况,要使用的功能都是。 在您的情况下,您可能应该将TeamCity快照依赖项从框架添加到核心,从应用添加到框架。
之后,“在快照依赖项发生更改时触发”选项将开始工作,在Core发生任何更改时触发框架和应用程序。

您的框架VCS触发器(快照)应与Core相同,您希望它在Core源更改时触发生成

+:root=MySVNRoot:/Core/**
应用程序VCS触发器应针对核心和框架VCS

+:root=MySVNRoot:/Core/**
+:root=MySVNRoot:/Framework/**
在TeamCity 7中,这些设置要容易得多,“触发快照依赖项中的构建更改”功能的作用与听起来的相反。对我来说,理想的结果是这样的:

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
我希望核心的改变触发框架的构建,最终是应用程序的构建,但我不希望框架的改变触发核心的改变,同时仍然触发应用程序的构建

这听起来像是“根据快照依赖项中的更改触发构建”功能所做的,但实际上它所做的是在链的开头触发构建,而不管更改发生在哪个项目中:

Change in Apps -> Build Core -> Build Framework -> Build Apps
Change in Framework -> Build Core -> Build Framework -> Build Apps
etc...
这意味着,如果你在应用程序中更改了某些内容,你将触发一个内置核心,并通过快照依赖关系,最终构建链中的所有内容。我认为对你不起作用的原因是,触发器必须在应用程序中设置,其他任何项目都没有触发器


遗憾的是,我认为实现我所描述的行为的唯一方法是在每个依赖的项目上拥有一个VCS触发器和完成构建触发器,并且一个安静的周期,这样您就可以独立地触发链中间某个地方的构建而不触发整个构建链。但是,“快照依赖项发生更改时触发”选项似乎无法正常工作。例如:如果应用程序中的代码发生了更改(这取决于核心和框架),那么核心和框架将在应用程序之前构建。然而,若核心发生了变化,那个么框架(或应用程序)将不会自动构建。我们使用的是6.5.1,它不是最新的版本,但是我在变更日志中找不到任何关于依赖触发器错误的信息,所以我没有费心更新。