Azure DevOps CI流水线会因为分支的变化而触发主干代码库的构建,反之亦然。

4

我已经为一个代码库设置了CI构建触发器,如下所示:

trigger:
- master

我有一个相同代码库的分支,我希望它拥有自己的流水线。
在分支的 pipeline.yml 文件中,我有以下内容:
trigger:
- ops-workshop/ms-lab01

然而,如果我提交分支上的更改,则会触发主管道和分支管道的构建。

将更改提交到主管道还会触发分支管道的构建(这不应该发生)。

我尝试使用branches节点来排除主管道,但似乎没有任何效果。参见:

trigger:
  branches:
    include:
    - ops-workshop/ms-lab01
    exclude:
    - master

唯一似乎能够阻止针对主管道进行构建的是使用通配符运算符来排除所有内容 - 然后不会触发任何构建。

如果我在 Azure DevOps 门户中进行更改,是否会有所不同。

这似乎是一个非常琐碎的问题,但是即使设置了排除项,我也不明白为什么同一提交会触发两个管道。

我的完整 YAML 文件如下:

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- ops-workshop/ms-lab01

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

任何建议都会受到赞赏。
2个回答

4
微软在官方文档中已经进行了解释:
我的构建流水线正在使用 branch2 中的 yaml 文件,尽管我将其设置为使用 branch1。子句“构建流水线没有关联分支”需要理解为,这些流水线与它们构建的代码库以及 YAML 文件相对于该代码库根目录的位置有关联。但是,每次构建运行时都会使用特定分支的 YAML 文件和内容。分支是基于推送更改的位置(CI 构建的情况下)、针对哪个 PR 的位置(PR 构建的情况下)或手动指定的分支(手动运行的情况下)来确定的。每个分支的 YAML 文件独立决定是否应该为该分支安排构建流水线。
也就是说,如果在两个分支中使用相同的 YAML 文件,每个分支都具有不同的筛选器,则同一构建流水线将处理两个 YAML 文件(因此触发器基本上是无用的)。
解决方法是,要么通过 Azure DevOps UI 覆盖触发器,要么在分支之间使用不同的文件名。

3
我看到有两个建议/需要检查的事情。
首先检查构建管道定义中默认设置的分支,YAML -> GetSources -> (image) enter image description here 其次尝试在构建管道定义中设置触发分支,选择“Triggers”选项,覆盖yaml,并在那里设置分支(参见图像) enter image description here

感谢@Kontekst的帮助。我已经更新了每个管道的默认分支,但这似乎仍然不能解决问题。所以我采取了你的第二个建议,覆盖了YAML触发器,现在一切都按预期工作了。奇怪的是,这似乎是一个已知的问题,并且你的解决方案也是微软推销的官方方案。今年早些时候有人遇到了确切的问题 - Matt Stannett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接