主服务器的Azure DevOps CI管道由分支的更改触发,反之亦然

时间:2019-11-29 10:18:07

标签: azure-devops yaml azure-pipelines build-triggers

我有一个用于仓库的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)'

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

我看到2条您可以检查的建议/事物。

首先检查在构建管道定义YAML-> GetSources->(图像)中默认设置了哪个分支

enter image description here

第二个方法是尝试在构建管道定义中设置触发分支,选择选项“触发器”,覆盖yaml,然后在此处设置分支(查看图像)

enter image description here

答案 1 :(得分:1)

微软对official documentation进行了解释,这很令人困惑:

即使我将其设置为从branch1使用,我的构建管道仍在使用branch2的yaml文件。

管道不与分支关联。 它们与所构建的存储库相关联,并与YAML文件相对于该存储库根目录的位置相关联。但是,每次管道运行时,它都会使用YAML文件和特定分支中的内容。该分支是基于将更改推送到的位置(对于CI版本),PR的目标位置(对于PR版本)或您手动指定的内容(对于手动运行)来确定的。每个分支的YAML文件独立确定是否应为该分支安排管道。

这意味着,如果在两个分支中使用相同的yaml文件,每个分支都有一个特定的过滤器,则同一管道将处理两个yaml文件(因此触发器几乎没有用)。

要解决此问题,请使用Azure DevOps UI覆盖触发器,或在分支之间使用其他文件名。