根据对 TFVC 中特定文件夹的更改触发 VSTS 构建

Triggering a VSTS build based on change to a specific folder within TFVC

在 Team Services 中,我正在尝试为一个包含不同产品子文件夹的团队项目设置多个构建定义(遵循 single Team Project 方法)。我遇到的问题是 CI 构建似乎是由对 TFVC 存储库的任何更改触发的,而不考虑 CI 触发过滤器。

回购看起来像:

MyProject
  Product1
  Product2
  Product3

我有 3 个单独的构建定义,每个都包含一个到其中一个子文件夹的映射(例如 $/MyProject/Product1)和一个 CI 触发器以及一个 "include" 过滤器同一个文件夹。

当我签入对 $/MyProject/Product1 中文件的更改时,VSTS 启动三个新构建,三个定义中的每一个。每个构建都声明与相同变更集的关联。

我期待一个基于构建定义的构建,其中包含“$/MyProject/Product1”的包含过滤器。

我尝试了一些其他的东西:

  1. 禁用 "batch changes" - 仍然会为每个 定义,但在构建中没有引用变更集 Product2 和 Product3 的过滤器。
  2. 为父文件夹和兄弟文件夹添加排除过滤器 - 没有看到任何 行为改变

docs 阅读:

TFVC Include

Select the version control paths you want to include and exclude. In most cases, you should make sure that these filters are consistent with your TFVC mappings on the Repository tab.

我是不是误解了过滤器的预期行为,还是这是一个错误?还有其他人遇到过这个吗?有什么解决方法吗?

注意:我确实看过 ,但我不清楚它是否涵盖了多重构建定义问题。如果您使用一个定义来构建多个分支并映射一个公共父级,过滤器可能无法发挥作用。

我相信我找到了错误!看起来构建的构建定义触发器不遵守映射,但它们在不久前使用过。我使用了历史记录并在我的两个构建定义中进行了比较,其中一个(较旧的构建定义)的 json 在触发器的 branchFilters 中的映射集中定义了完整的分支路径,但是新分支定义在 branchFilters 中只有存储库路径,即使存储库映射指向分支。

旧的和正确的构建定义:

"triggers": [
{
      "branchFilters": [
        "+$/WF.Workflow/Main/!v09"

新构建定义(存储库中的每次签入都是错误的并且正在运行)

"triggers": [
        {
      "branchFilters": [
        "+$/WF.Workflow"

这个新的应该指向“+$/WF.Workflow/Main/!v08”

我使用此信息在 Eddie 创建的 Connect 问题中添加了评论。希望对你有帮助。

作为临时解决方法,我尝试使用 Gated CheckIn,它现在似乎可以使用。它在签到过程中增加了一些官僚作风,但这是我现在所能做的。希望尽快解决这个问题。

此问题现已修复。请再试一遍。详情参考这个link:CI Builds may not trigger as expected.

Final Update: Monday, 27 June 2016 22:53 UTC

The hotfix deployment completed on 27 June 2016 21:26 UTC and we have verified that we can no longer reproduce the issue. We understand that customers rely on VS Team Services as a critical service and apologize for any impact this incident caused.

Sincerely, Arvin