azure-devops - 触发标记时 Azure Devops Pipeline 触发忽略路径
问题描述
我有两个构建我的客户端和 API 的构建管道,但是当我创建一个新的 git 标签时,两个构建都会被触发,即使标签可能只与基于我的客户端代码的更改有关。
前端构建-ci.yml
trigger:
branches:
include:
- master
tags:
include:
- refs/tags/*_prodrelease*
paths:
include:
- Clients/*
exclude:
- Api/*
api-build-ci-yml
trigger:
branches:
include:
- master
tags:
include:
- refs/tags/*_prodrelease*
paths:
include:
- Api/*
exclude:
- Clients/*
定期提交按预期工作(即客户端代码触发客户端构建),我尝试了多种排除路径的变体无济于事。
标签过滤应该忽略路径,还是应该以与分支相同的方式工作?
一种解决方法是使用更多描述性标签(即20200326_prodrelease_api),但如果 api 和客户端都准备好进行生产,我会尽量避免需要两个标签。
解决方案
当我创建一个新的 git 标签时,两个构建都会被触发,即使标签可能只与基于我的客户端代码的更改有关。
标签过滤应该忽略路径,还是应该以与分支相同的方式工作?
抱歉,恐怕您遇到的是 CI 触发器的预期行为。tag filtering is ignoring paths
是的,当标签与包含文件路径的分支过滤器结合使用时,您的猜测是正确的。
请查看官方文档中的注意提示:
如果您指定标签与包含文件路径的分支过滤器结合使用,则如果满足分支过滤器并且满足标签或路径过滤器,则触发器将触发。
问题原因:
这就是为什么在您的场景中触发两个构建的原因。由于您现在将标签与分支过滤器和文件路径过滤器结合使用,因此两者都branch filter ok + tag ok
可以branch filter ok + path ok
触发构建。
行为:
不创建标签时,branch filter ok + path ok
将像client code triggers client build
and一样工作api code triggers api build
。并且在创建特定标签时,branch filter ok + tag ok
总是满足原因,它将触发两个构建。
正如您上面提到的,在这种情况下,使用更具描述性的标签作为解决方法并不是一个糟糕的选择。此外,如果您确实希望同时使用三个过滤器等功能,请随时通过在我们的用户语音论坛中提出功能来分享您的反馈。在此处分享链接,对此感兴趣的成员将为您投票。
推荐阅读
- sql - Oracle 7 EXECUTE IMMEDIATE 替代方案
- reactjs - Recharts - 在 BarCharts 中设置没有轴的域
- arduino - 为 MKR 1500 获取额外的 UART 端口
- ios - “Calendar.current.isDate”日期参数是否需要使用同一时区的日期?
- scheme - Lisp/Scheme 中的引号与字符串相同吗?
- php - PHPMailer 不接受 docx mime 类型
- go - Go modules:“找不到提供包的模块”导入依赖项的子包
- python - re.sub() 通配符字符串替换
- c# - 迭代具有多种类型的通用列表
- pygame - 如何在 pygame 中使 spritesheet 图像更宽?