Azure devops Azure YAML pipelne是否支持触发器中路径筛选器中的通配符?

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

我在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.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根据更改的文件夹调用)

它工作得很好,但不幸的是需要通过这些循环

但它需要额外的工作

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")}

    }
}
然后为所有剩余任务添加条件:

在这种情况下,如果更改文件不符合我们的筛选器,将跳过所有剩余任务

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")}

    }
}
然后为所有剩余任务添加条件:


在这种情况下,如果更改文件不符合我们的筛选条件,则将跳过所有剩余任务。

问题如何?下面的答案是否解决了您的问题,如果没有,请告诉我有关此问题的最新信息?问题如何?下面的答案是否解决了您的问题,如果没有,请告诉我有关此问题的最新信息?