如何修改Path filter实现代码变更仅触发对应目标流水线
Azure DevOps 构建验证路径过滤正确配置方案
配置失败核心原因
之前两组规则不生效,是对路径过滤器的匹配逻辑和通配符规则理解有误:
- 单星号
*只会匹配当前路径层级的任意内容,不会递归匹配子目录下的嵌套文件。之前写的/Child solution A/*只能匹配A文件夹下直接存放的文件,A文件夹里二级、三级子目录的文件完全不在匹配/排除范围内。 - 路径过滤器不能只配置排除规则:如果规则列表里没有任何有效包含项,系统会判定没有可触发的路径,直接导致流水线永远不会被触发,这就是第二组配置里Main-Pipeline完全不触发的原因。
- 手动写
/*做根目录包含是无效的:这个写法只会匹配仓库根目录下直接存放的文件,不会包含根目录下其他非A、B的子文件夹内容。
最终可用配置
三个流水线的Path filter分别按如下配置即可:
Child-A-Pipeline:/Child solution A/**Child-B-Pipeline:/Child solution B/**Main-Pipeline:/** !/Child solution A/** !/Child solution B/**
规则逻辑说明
- 双星号
**是递归通配符,匹配任意层级的子目录和文件:/**代表包含仓库下所有路径的所有内容 - 前缀带
!的是排除规则:!/Child solution A/**代表从已包含的范围内,递归排除A文件夹下的所有内容,无论嵌套多少层 - 路径中包含空格不需要额外加转义符或引号,直接按实际文件夹名书写即可
触发效果验证
配置完成后,触发逻辑完全符合预期:
- 仅变更A文件夹内任意层级内容:只触发Child-A-Pipeline
- 仅变更B文件夹内任意层级内容:只触发Child-B-Pipeline
- 仅变更两个子文件夹范围外的内容(包括根目录的sln文件、其他自定义文件夹内容):只触发Main-Pipeline
- 若单次提交同时包含子文件夹内变更和根目录范围变更,会同时触发对应匹配的流水线,属于路径过滤的正常逻辑。
内容的提问来源于stack exchange,提问作者Shahar Shokrani
相关产品推荐
相关产品推荐

