我在相应的文件夹中有两个解决方案,例如
SolutionA\SolutionsA.sln
SolutionB\SolutionB.sln
每个解决方案都配置了 Gated Check-in 构建;即两个构建定义GatedSolutionA 和GatedSolutionB。
现在的情况是,如果我同时检查两个文件夹中的更改,TFS 会显示一个对话框来选择构建(使用 GatedSolutionA、GatedSolutionB 下拉)以针对更改集运行。我的变更集在解决方案 B 中有重大更改,在解决方案 A 中有非重大更改。即构建 GatedSolutionB 会失败,但 GatedSolutionA 会通过。
当我选择 GatedSolutionA 来针对我的变更集进行构建时,TFS 将其签入,这反过来使解决方案 B 处于损坏状态,并且解决方案 B 的门控签入目的被破坏。
如果我将触发器更改为 CI 以进行构建定义,TFS 会将两个构建都排入队列。
我正在寻找的是相同的行为,即所有门控构建都排队,如果其中一个失败,变更集应该被拒绝。
注意:我不想为这两种解决方案创建单个构建定义。另外,我知道我们可以通过创建两个单独的变更集来避免这个问题的发生,但这通常发生在开发人员不知道他们有一些文件正在签入以寻求解决方案而不是他们正在处理的解决方案时。
2019 年更新
由于 TFS 和 Azure DevOps 已经开始使用 GIT 和拉取请求 - 使用分支策略(在主分支上),因此可以添加多个构建检查,例如路径更改SolutionA\*
,BuildA 可以配置为排队和检查,类似地更改path SolutionB\*
, BuildB 可以配置为排队和检查,因此对于在两个路径中都有更改的提交,将对两个构建进行排队以进行检查。等待使用 GIT 是值得的。
注意:文档未更新以显示路径过滤器,并且在https://github.com/MicrosoftDocs/vsts-docs/issues/3235的 github 上提出了缺陷。因此,筛选器在 Azure DevOps 和服务器中可用。