azure-devops - 如何在 azure 管道中通过分支 AND 标签触发?
问题描述
我想创建一个天蓝色的管道,这样当我推送到分支(开发)和标签(测试 *)时,管道将被触发。但是,当我在没有标签的情况下推送到分支(开发)时会触发管道,这表明在推送到(开发)分支时触发器正在执行或(测试*)标签时正在执行。
例子:
trigger:
branches:
include:
- develop
- refs/tags/{test*}
仅当推送到 (develop) 分支也引用 (test*) 标签时,如何才能触发触发器?
解决方案
根据关于触发器的文档
当您指定触发器时,它会替换默认的隐式触发器,并且只有推送到明确配置为包含的分支才会触发管道。首先处理包含,然后从该列表中删除排除。
我认为文档中缺少(或只是令人困惑)的是,满足给定部分(分支、路径、标签)中的任何 1 的项目都针对该部分列出,如果它们满足该部分的任何 1 exclude 子句,则将其删除。除非使用所有三个部分。然后以下注释适用:
如果您结合包含文件路径的分支过滤器指定标签,则如果满足分支过滤器并且满足标签或路径过滤器,则触发器将触发。
概括
该include:
集合首先创建并excludes
从该列表中删除。
部分是OR ed together (branches OR tags)
,(branches OR paths)
除非使用了所有部分,否则它们是(branches AND (tags OR paths))
考虑到这一点:
如果您只想继续使用分支部分,则需要使用一个选项,从列表中删除所有不需要的分支,并且只明确包含标记 ref(像分支一样处理)。
包含标签并排除不需要的分支模式
trigger:
branches:
include:
- refs/tags/test*
exclude:
# a list of the branches for which you don't want to trigger
- master
- features/*
- bugs/*
- hotfix/*
如果您不限于仅使用分支部分,那么使用所有 3 个部分将通过包括develop
分支和test*
标签但不包括所有路径来到达那里。
包括标签和期望的分支,但排除该分支上的所有路径
trigger:
branches:
include:
- develop
tags:
include:
- test*
paths:
exclude:
- /*
第二个选项基本上shouldFire = (branch == develop && (tag == test* || false))
相当于shouldFire = (branch == develop && tag == test*)
推荐阅读
- android - 从设备应用程序调用 http api
- python - 如何修复过度拟合或我的代码中的错误在哪里
- javascript - Jquery-ui 可调整大小的函数不能与 flexbox div 一起工作
- php - 在单个 PHP 函数上执行多个 cron 作业
- android - Flutter - 如何在应用邀请功能的 Firebase 动态链接中传递自定义参数?
- python - 遍历两个列表 A 和 B
- javascript - 使用Javascript将图像转换为黑白
- azure - 我们可以在 Azure 中使用 PostgREST API
- android - ARCore Release 版本的问题
- kubernetes - 版本“extensions/v1beta1”中类型“部署”没有匹配项