【问题标题】:How to handle shared projects correctly in TeamCity如何在 TeamCity 中正确处理共享项目
【发布时间】:2011-01-02 15:59:38
【问题描述】:

假设我在 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 )。

【问题讨论】:

    标签: teamcity


    【解决方案1】:

    TeamCity 的结帐规则功能能够支持您所描述的设置。我的团队使用它来做与您尝试做的事情类似的事情。

    首先,设置单个 SVN Root。这个根的 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 也是如此)。

    【讨论】:

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

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

    +:web/websitea
    +:share/liba
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2018-08-04
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多