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

8
假设我在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
如何为网站A设置teamcity项目?目前,我让它指向svn://root,但这会导致它触发构建,即使更改了网站b或共享库b,也是不正确的。我真正需要的是一种方式,只有在svn://root/web/websitea或svn://root/shared/liba有更改时才触发构建。
我尝试在同一项目中设置两个vcs根,它们指向上述两个svn路径之一,但是似乎没有办法为每个vcs根设置工作目录。因此,它最终只是将两个svn路径的内容直接复制到我的构建目录的根目录中,而不是将它们放在正确的位置(C:\ Build \ Web \ WebsiteA和C:\ Build \ Shared \ LibA)。
2个回答

13

TeamCity的检出规则功能可以支持您所描述的设置。我的团队使用它来执行类似于您尝试执行的操作。

首先,设置一个单独的SVN根目录。该根目录的URL应该像这样:

svn://root/

然后设置以下结帐规则。

对于A项目:

+:web/websitea=>/web/websitea
+:shared/liba=>/shared/liba

针对B项目:

+:web/websiteb=>/web/websiteb
+:shared/libb=>/shared/libb

TeamCity的检出规则文档并没有完全明确这一点,但只有您包含的特定路径将用于触发构建。这应该满足您仅在websitea和liba中进行更改才会触发其构建(对于B也是如此)的需求。


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

6
除了Eric提到的内容外,如果您需要检查整个源代码根目录,但仅基于特定路径触发构建,则可以编辑“构建触发”部分中的VCS触发器规则,例如:
+:web/websitea
+:share/liba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接