3

我有一个用于 repo 的 CI 构建触发器设置,如下所示:

trigger:
- master

我有同一个 repo 的一个分支,我想拥有它自己的管道。

在我拥有的分支的 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)'

任何建议,将不胜感激。

4

2 回答 2

3

我看到 2 条建议/您可以查看的内容。

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

在此处输入图像描述

其次是尝试在构建管道定义中设置触发分支,选择“触发器”选项,覆盖 yaml,并在那里设置分支(看图片)

在此处输入图像描述

于 2019-11-29T15:17:04.077 回答
2

令人困惑的是,微软在官方文档上做出了解释:

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

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

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

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

于 2020-03-26T08:51:59.663 回答