当我的 TFS 构建由特定于分支的签入触发时,为什么它不将该分支设置为其源?

When my TFS build is triggered by a branch-specific check-in, why doesn't it set that branch as its source?

我的目标是创建一个 TFS CI 构建,该构建由在 TFVC 中托管的项目的两个特定分支上的签入触发。当我手动对构建进行排队并在队列提示的 "Shelveset name" 字段中键入特定分支时,构建按预期工作。但是,当我签入一个特定分支的更改时,构建会尝试使用两个分支的父文件夹作为其默认源,从而导致在整个构建定义中使用 $(Build.SourceBranchName) 变量的文件路径不正确。

我的文件夹结构如下:

- $/MyRepo
|
| -Integration Suite
  |
  | -CurrentVersion
  |
  | -Dev

我打开了 CI 触发器,路径过滤器包括 $/MyRepo/Integration Suite/CurrentVersion$/MyRepo/Integration Suite/Dev

在 "Get Sources" 任务中,我的存储库设置为 $/MyRepo,我将这些服务器路径分别映射到 CurrentVersionDev 本地路径。

例如,我希望在 CurrentVersion 分支下检查更改会将构建源设置为 $/MyRepo/Integration Suite/CurrentVersion,但它会设置为 $/MyRepo/Integration Suite。这意味着我在定义中使用 $(Build.SourceBranchName) 构建的任何路径都具有 Integration Suite 而它们应该具有 CurrentVersion.

我是不是做错了什么?还是我想要的行为不受支持?

TFVC 依靠工作区映射来了解要下载的内容。工作区映射可以包含跨不同团队项目的多个 TFVC 存储库,单个存储库中的多个分支,基本上,无论您想要什么。因此,它无法理解如何针对特定分支动态更改工作区映射。

TFVC 构建的可悲现实是您需要为每个分支构建一个。这使得 TFVC……呃……对于许多常见的持续交付场景来说不是很好。