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

Teamcity - Multiple web project in a single repo - deploy only some of them

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

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

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

如果共享 class 库项目被引用为其他三个 webapp 的 submodule,这意味着每个 webapp 都可以选择更新到该共享库项目回购的最新提交。

这会导致父仓库的 gitlink (the special entry in the index 发生变化,这又会使父仓库注册一个新的提交(引用子模块仓库的新 gitlink SHA1)
那将不再是 "dummy change".
TeamCity 会将其作为触发作业的 webapp 新更改进行选择。

选项很少:

  1. 如上所述使用submodule or subtree.

  2. 使用githooks到"capture"所需的分支(folder/file/path任何你需要的)并执行您要执行的任何 build/deploy 脚本。 如果您使用 git 集线器,则有更多选项。 Git 集线器命名为:webhooks

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

希望对您的问题有所帮助。