Lub*_*bos 4 azure-devops azure-pipelines 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.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
Run Code Online (Sandbox Code Playgroud)
(示例已简化,实际上有更多的项目/文件夹。)
我想要不同的部分有不同的管道。例如,只要在任何后端master项目的分支中提交任何文件,就会触发管道。像这样的东西:
trigger:
branches:
include:
- master
paths:
include:
- src/Sample.Backend.*
- src/Sample.Common
- src/Sample.Tests.Common
Run Code Online (Sandbox Code Playgroud)
问题是,该过滤器src/Sample.Backend.*不起作用。我必须添加每个后端文件夹的确切名称才能使其正常工作。我可以使用exclude,但我有同样的问题 - 还有很多其他项目,我必须将它们全部命名。
我发现不支持通配符:https://github.com/MicrosoftDocs/azure-devops-docs/issues/397#issuecomment-422958966
还有其他方法可以达到相同的结果吗?
Azure YAML pipeline 是否支持触发器中路径筛选器中的通配符?
这是我们产品主论坛上的已知请求:
该功能尚未实现;您可以添加您的评论并根据用户声音进行投票。
作为我们的解决方法,我们添加一个内联 PowerShell 任务作为第一个任务来执行 git 命令行git diff HEAD HEAD~ --name-only,然后获取修改后的文件名并过滤最新提交中的文件名,并使用Logging Command设置变量,然后在构建管道后续步骤中的自定义条件:
and(succeeded(), eq(variables['CustomVar'], 'True'))
Run Code Online (Sandbox Code Playgroud)
我们的内联 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")}
}
}
Run Code Online (Sandbox Code Playgroud)
然后为所有剩余任务添加条件:
在这种情况下,如果更改的文件不符合我们的过滤器,则将跳过所有剩余的任务。
| 归档时间: |
|
| 查看次数: |
7537 次 |
| 最近记录: |