我有一个用于仓库的CI构建触发器设置,如下所示:
trigger:
- master
我有一个相同的仓库分支,希望拥有自己的管道。
在分支的pipeline.yml中,我有:
trigger:
- ops-workshop/ms-lab01
但是,如果我将更改提交到分支,则将同时为主管道和分支管道触发构建。
提交给master也会触发分支的管道(不应该这样做)。
我尝试使用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://docs.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)'
任何建议将不胜感激。
答案 0 :(得分:1)
我看到2条您可以检查的建议/事物。
首先检查在构建管道定义YAML-> GetSources->(图像)中默认设置了哪个分支
第二个方法是尝试在构建管道定义中设置触发分支,选择选项“触发器”,覆盖yaml,然后在此处设置分支(查看图像)
答案 1 :(得分:1)
微软对official documentation进行了解释,这很令人困惑:
即使我将其设置为从branch1使用,我的构建管道仍在使用branch2的yaml文件。
管道不与分支关联。 它们与所构建的存储库相关联,并与YAML文件相对于该存储库根目录的位置相关联。但是,每次管道运行时,它都会使用YAML文件和特定分支中的内容。该分支是基于将更改推送到的位置(对于CI版本),PR的目标位置(对于PR版本)或您手动指定的内容(对于手动运行)来确定的。每个分支的YAML文件独立确定是否应为该分支安排管道。
这意味着,如果在两个分支中使用相同的yaml文件,每个分支都有一个特定的过滤器,则同一管道将处理两个yaml文件(因此触发器几乎没有用)。
要解决此问题,请使用Azure DevOps UI覆盖触发器,或在分支之间使用其他文件名。