Azure devops Azure YAML pipelne是否支持触发器中路径筛选器中的通配符?
我在git存储库中有这样的项目(文件夹)结构:Azure devops Azure YAML pipelne是否支持触发器中路径筛选器中的通配符?,azure-devops,azure-yaml-pipelines,Azure Devops,Azure Yaml Pipelines,我在git存储库中有这样的项目(文件夹)结构: /src /src/Sample.Backend.Common /src/Sample.Backend.Common.Tests /src/Sample.Backend.Common.Domain /src/Sample.Backend.Common.Domain.Tests /src/Sample.Backend.Pricing.Abstractions /src/Sample.Backend.Pricing.Domain /src/Sample
/src
/src/Sample.Backend.Common
/src/Sample.Backend.Common.Tests
/src/Sample.Backend.Common.Domain
/src/Sample.Backend.Common.Domain.Tests
/src/Sample.Backend.Pricing.Abstractions
/src/Sample.Backend.Pricing.Domain
/src/Sample.Backend.Pricing.Domain.Tests
/src/Sample.Backend.Pricing.Persistence
/src/Sample.Backend.Pricing.Persistence.Tests
/src/Sample.Backend.Accounting.Abstractions
/src/Sample.Backend.Accounting.Domain
/src/Sample.Backend.Accounting.Domain.Tests
/src/Sample.Backend.Accounting.Persistence
/src/Sample.Backend.Accounting.Persistence.Tests
/src/Sample.Backend.Api
/src/Sample.Common
/src/Sample.Frontend.Common
/src/Sample.Frontend.Web
/src/Sample.Tests.Common
(示例已简化,实际中有更多的项目/文件夹。)
我想为不同的部分安装不同的管道。例如,在任何后端项目的master
分支中提交任何文件时触发的管道。大概是这样的:
trigger:
branches:
include:
- master
paths:
include:
- src/Sample.Backend.*
- src/Sample.Common
- src/Sample.Tests.Common
问题是,筛选器src/Sample.Backend.*
不起作用。我必须添加每个后端文件夹的确切名称才能使其正常工作。我可以使用exclude
,但我也有同样的问题——还有许多其他项目,我必须一一列举
我发现不支持通配符:
有没有其他方法可以达到同样的效果?没有,目前这是不可能的。您甚至有功能要求,我建议您投票表决。(我已经这样做了)Rick在上述主题中分享了他如何克服这个问题的想法: 我目前通过拥有3个文件来实现这一目标:
- azure-pipelines.yml(每次提交时调用一些python)
- azure-pipelines.py
- azure-pipelines-trigger.yml(python根据更改的文件夹调用)
但是它需要额外的工作。不,这在目前是不可能的。您甚至有功能要求,我建议您投票表决。(我已经这样做了)Rick在上述主题中分享了他如何克服这个问题的想法: 我目前通过拥有3个文件来实现这一目标:
- azure-pipelines.yml(每次提交时调用一些python)
- azure-pipelines.py
- azure-pipelines-trigger.yml(python根据更改的文件夹调用)
git diff HEAD~--name only
获取修改后的文件名并在最新提交中过滤文件名,和用于设置变量,然后在生成管道的后续步骤中在自定义条件中引用这些变量:
and(succeeded(), eq(variables['CustomVar'], 'True'))
我们的内嵌powershell脚本:
cd $(System.DefaultWorkingDirectory)
$editedFiles = git diff HEAD HEAD~ --name-only
echo "$($editedFiles.Length) files modified:"
$editedFiles | ForEach-Object {
echo $_
Switch -Wildcard ($_ ) {
'XXXX/Src/Sample.Backend.*' {
Write-Host ("##vso[task.setvariable variable=CustomVar]True")
}
'XXXX/Src/Sample.Common*' {
Write-Host ("##vso[task.setvariable variable=CustomVar]True")}
'XXXX/Src/Sample.Tests.Common' {
Write-Host ("##vso[task.setvariable variable=CustomVar]True")}
}
}
然后为所有剩余任务添加条件:
在这种情况下,如果更改文件不符合我们的筛选器,将跳过所有剩余任务
Azure YAML pipelne是否支持触发器中路径筛选器中的通配符
这是我们的产品主论坛上的一个已知请求:
此功能尚未实现,您可以添加评论并投票给此用户
作为解决办法对于我们来说,我们添加了一个内联powershell任务作为第一个任务,以执行git命令行git diff HEAD~--name only
获取修改后的文件名并在最新提交中过滤文件名,和用于设置变量,然后在生成管道的后续步骤中在自定义条件中引用这些变量:
and(succeeded(), eq(variables['CustomVar'], 'True'))
我们的内嵌powershell脚本:
cd $(System.DefaultWorkingDirectory)
$editedFiles = git diff HEAD HEAD~ --name-only
echo "$($editedFiles.Length) files modified:"
$editedFiles | ForEach-Object {
echo $_
Switch -Wildcard ($_ ) {
'XXXX/Src/Sample.Backend.*' {
Write-Host ("##vso[task.setvariable variable=CustomVar]True")
}
'XXXX/Src/Sample.Common*' {
Write-Host ("##vso[task.setvariable variable=CustomVar]True")}
'XXXX/Src/Sample.Tests.Common' {
Write-Host ("##vso[task.setvariable variable=CustomVar]True")}
}
}
然后为所有剩余任务添加条件:
在这种情况下,如果更改文件不符合我们的筛选条件,则将跳过所有剩余任务。问题如何?下面的答案是否解决了您的问题,如果没有,请告诉我有关此问题的最新信息?问题如何?下面的答案是否解决了您的问题,如果没有,请告诉我有关此问题的最新信息?