Azure devops 如何在azure管道中通过分支和标记触发?

Azure devops 如何在azure管道中通过分支和标记触发?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我想创建一个azure管道,这样当我推到分支(开发)和标记(测试*)时,管道将被触发。但是,当我在没有标记的情况下推送到分支(develope)时,就触发了管道,这表明在推送到(develope)分支或(test*)标记时正在执行触发器 例子: 只有在按下(开发)分支并参考(测试*)标记时,我如何才能触发触发器?根据上的文档 指定触发器时,它将替换默认的隐式触发器,并且只有推送到显式配置为包含的分支时,才会触发管道首先处理包含,然后从该列表中删除排除。 我认为文档中缺少(或只是混淆)的是,满足给

我想创建一个azure管道,这样当我推到分支(开发)标记(测试*)时,管道将被触发。但是,当我在没有标记的情况下推送到分支(develope)时,就触发了管道,这表明在推送到(develope)分支或(test*)标记时正在执行触发器

例子:
只有在按下(开发)分支并参考(测试*)标记时,我如何才能触发触发器?

根据上的文档

指定触发器时,它将替换默认的隐式触发器,并且只有推送到显式配置为包含的分支时,才会触发管道首先处理包含,然后从该列表中删除排除。

我认为文档中缺少(或只是混淆)的是,满足给定节中任何1 include的项(分支、路径、标记)将针对该节列出,如果它们满足该节的任何1 exclude子句,则将被删除除非使用了所有三个部分。则以下注释适用:

如果将标记与包含文件路径的分支筛选器组合指定,则如果满足分支筛选器且满足标记或路径筛选器,则触发器将触发

总结 首先创建
include:
集合,然后从该列表中删除
excludes

节被合并
(分支或标记)
(分支或路径)
,除非使用了所有的节,否则它们就是
(分支和(标记或路径)

考虑到这一点: 如果希望继续只使用Branchs部分,则需要使用一个选项,从列表中删除所有不需要的分支,并且只显式地包括标记ref(被视为分支)

包括标记并排除不需要的分支模式

如果您不局限于只使用分支部分,那么使用所有3个部分将通过包括
develope
分支和
test*
标记,但不包括all路径而达到目的

包括标记和所需分支,但排除该分支上的所有路径


第二个选项基本上是
shouldFire=(branch==develope&&(tag==test*| | false))
,它相当于
shouldFire=(branch==develope&&tag==test*)
谢谢您,先生@Josh Gust

我尝试了这个代码,它运行了

trigger:
  branches:
    include:
      - develop
  tags:
    include:
      - test*
  paths:
    exclude:
      - /*

乔什·古斯特(Josh Gust)在当时的回答可能是正确的,但不幸的是,情况似乎不再如此

A完全改变了include/exclude逻辑的工作方式

考虑到这一点,在我看来,除了特定的分支加标记组合之外,没有办法完全阻止管道启动。这是非常不幸的

下一个最好的办法似乎是尽早中止管道。您可以执行以下操作:

  • 确保管道设置为仅在您需要的标记存在时触发。使用标准的
    标记
    包含设置来实现这一点
  • 备选方案1:作为第一步,如果分支名称不是您期望的名称,则有条件地以“已取消”的形式中止生成。这似乎很复杂,你可能会想使用一个库
  • 备选方案2:在管道中的每个步骤中添加一个条件,如
    eq(变量['Build.SourceBranchName'],'master')
    。这很乏味,但很简单
在确定在YAML脚本中使用哪个分支名称时,请记住以下警告(如果您使用的是Git):

Build.SourceBranchName:ref中的最后一个路径段。例如,在
refs/heads/master
中,此值为
master
。在
refs/heads/feature/tools
中,此值为
tools


从你2月12日的评论来看,我觉得乔希的建议在当时对你有效如果您能确认它是否仍按预期工作,我们将不胜感激。如果它仍在工作,那么Azure文档更新肯定是错误的,我想就此向他们提出一个问题。

尝试在您的问题中添加一些原因。如果读者知道你为什么要问你的问题,他们可能会给你更全面、更有用的答案。啊。。这是一个很好且简单的实现,可以排除所有路径并包含带有通配符的标记。我可以确认上面带有路径排除的第二个示例不再像所描述的那样工作。在特性分支上使用该语法的测试作业在应用标记时被触发。
trigger:
  branches:
    include:
    - refs/tags/test*
    exclude:
    # a list of the branches for which you don't want to trigger
    - master
    - features/*
    - bugs/*
    - hotfix/*
trigger:
  branches:
    include:
      - develop
  tags:
    include:
      - test*
  paths:
    exclude:
      - /*
trigger:
  branches:
    include:
      - develop
  tags:
    include:
      - test*
  paths:
    exclude:
      - /*