如何在TeamCity中正确处理共享项目

Jus*_*tin 8 teamcity

假设我在TeamCity中有两个"项目",它们是两个网站,每个网站都使用不在网站的svn路径内的共享库.这是svn结构,使其更清晰:

网站A:svn:// root/web/websitea(使用共享库a)

网站B:svn:// root/web/websiteb(使用共享库b)

共享库A:svn:// root/shared/liba

共享库B:svn:// root/shared/libb

我如何为网站设置团队城市项目?现在我指向svn:// root,但即使网站b或共享库b被更改,也会触发构建,这是不对的.我真正需要的是只有在svn:// root/web/websitea或svn:// root/shared/liba中发生更改时触发构建的方法.

我尝试在同一项目中设置两个vcs根,指向上面的两个svn路径,但是似乎没有办法为每个vcs根设置工作目录.出于这个原因,它最终只是将两个svn路径的内容直接复制到我的构建目录的根目录中,而不是将它们放在适当的位置(C:\ Build\Web\WebsiteA&C:\ Build\Shared\LibA) ).

Eri*_*ric 13

TeamCity的结账规则功能能够支持您所描述的设置.我的团队使用它来做类似于你想要做的事情.

首先,设置一个SVN Root.这个根的URL将是这样的:

svn://root/
Run Code Online (Sandbox Code Playgroud)

然后设置以下结帐规则.

对于项目A:

+:web/websitea=>/web/websitea
+:shared/liba=>/shared/liba
Run Code Online (Sandbox Code Playgroud)

对于项目B:

+:web/websiteb=>/web/websiteb
+:shared/libb=>/shared/libb
Run Code Online (Sandbox Code Playgroud)

关于结帐规则的TeamCity文档并不完全清楚这一点,但只有您所包含的特定路径才会用于触发构建.这应该满足你的需要,只有网站和liba触发其构建的更改(和B相同).

  • 在这种情况下,路径映射(=>)并不是完全必要的,因为路径是相同的,没有它们,TeamCity将默认使用相同名称的路径.如果您在开发期间将存储库签出到工作目录时碰巧选择了不同的路径,则映射到具有不同名称的路径可能很有用(在这种情况下,项目引用可能是与相对位置不匹配的相对路径源控制存储库中的路径).请参阅:http://confluence.jetbrains.net/display/TCD6/VCS+Checkout+Rules (2认同)

man*_*lds 6

除了Eric提到的内容之外,如果您需要检出整个源根,但只触发基于特定路径的构建,则可以在Build Triggering部分编辑VCS Trigger规则,如下所示:

+:web/websitea
+:share/liba
Run Code Online (Sandbox Code Playgroud)