Teamcity - 单个仓库中的多个Web项目 - 仅部署其中一些

时间:2015-01-26 19:46:53

标签: git teamcity webdeploy

我有一个git repo,其中包含一个带有多个Web应用程序(公共站点,内部站点,公共服务)和共享类库项目的.Net解决方案。我想根据所做的更改部署一些项目。例如,如果我修复了公共站点中的错误,我只想部署该站点,如果我修复了公共站点和api中的错误,我想部署它们等等。我可以通过创建不同的构建配置并使用触发器规则和按Ant_like_wildcard文件夹路径过滤来实现它,并部署相应的项目。

当我仅在共享类库中进行更改而不在任何Web应用程序中进行更改时,这是一个棘手的案例。在这种情况下,我有以下选择:

  • 在必须部署的网络应用中进行虚拟更改

  • 包含必须在提交消息中部署的Web项目,并使用VCS_comment_regexp过滤触发器

  • 解析git commit消息,在构建脚本中使用setParameter设置参数,并按照以下步骤使用这些参数。

我不喜欢任何选项,因为它们看起来很糟糕。这种情况有更好的选择吗?

2 个答案:

答案 0 :(得分:1)

如果共享类库项目被引用为其他三个Web应用程序的 submodule ,则表示每个Web应用程序都可以选择更新到该共享库项目存储库的最新提交。

这会导致 gitlink (父级仓库的special entry in the index)发生变化,从而使父级仓库注册新的提交(引用新的子模块repo的gitlink SHA1) 这将不再是一个虚假的改变" 这可以被TeamCity选为一个触发工作的webapp新变化。

答案 1 :(得分:0)

选项很少:

  1. 如上所述,使用 submodule subtree

  2. 使用git hooks 来"捕获"所需的分支(文件夹/文件/路径,无论您需要什么),并执行您要执行的任何构建/部署脚本。 如果你使用git hub,还有更多的选择。 Git hub命名为: webhooks

  3. 例如: git diff-tree -r --name-only HEAD^1将为您提供当前提交中所有已修改文件的列表。与grep一起使用它来搜索你需要的路径。

    希望它能帮助您解决问题。