我在Azure DevOps中设置了一个存储库,其中包含多个应用程序的一些配置。对于每个应用程序,设置不同的发布管道。每一个都有一个自动触发器,当仓库内的更改被推送时。我希望只触发更改所涉及的应用程序的发布管道。在repo中,每个应用程序都有自己的文件夹。有没有可能以某种方式为这些发布管道指定一个触发器过滤器,以便应用程序的发布管道仅在repo中的文件夹发生更改时才被触发,而不是在repo中发生任何更改时?这是可能的,还是必须通过自定义脚本来实现?
pu82cl6c1#
恐怕发布管道暂时不支持设置触发路径过滤器。作为一种解决方法,我们需要在发布管道运行之前使用自定义脚本检查更改的repo路径。我们可以设置一个构建管道,首先使用git命令检查repo路径,然后使用扩展任务(Trigger Azure DevOps Pipeline)或Rest API(参考此工单:Trigger release)脚本来触发相关的发布管道。参考我的示例来检查更改的路径和触发器发布管道:
trigger: - main steps: - powershell: | $files=$(git diff HEAD HEAD~ --name-only) $temp=$files -split ' ' $count=$temp.Length echo "Total changed $count files" For ($i=0; $i -lt $temp.Length; $i++) { $name=$temp[$i] echo "this is $name file" if ($name -like "foldername/*") { Write-Host "##vso[task.setvariable variable=ReleasePipelinename]ReleasePipelineName1" } if ($name -like "foldername2/*") { Write-Host "##vso[task.setvariable variable=ReleasePipelinename]ReleasePipelineName2" } } displayName: 'PowerShell Script' - task: TriggerPipeline@2 displayName: 'Trigger Azure DevOps Pipeline: Release' inputs: serviceConnection: serviceconnectionname project: projectname releaseDefinition: '$(ReleasePipelinename)'
上面的脚本将使用git diff命令来获取提交中更改的文件。它将根据更改的文件名将发布管道名称设置为Pipeline变量。然后,触发管道任务将根据变量值触发发布管道。
**注意:**如果在构建管道任务中考虑触发发布管道,需要在发布管道界面中关闭触发器。
1条答案
按热度按时间pu82cl6c1#
恐怕发布管道暂时不支持设置触发路径过滤器。
作为一种解决方法,我们需要在发布管道运行之前使用自定义脚本检查更改的repo路径。
我们可以设置一个构建管道,首先使用git命令检查repo路径,然后使用扩展任务(Trigger Azure DevOps Pipeline)或Rest API(参考此工单:Trigger release)脚本来触发相关的发布管道。
参考我的示例来检查更改的路径和触发器发布管道:
上面的脚本将使用git diff命令来获取提交中更改的文件。
它将根据更改的文件名将发布管道名称设置为Pipeline变量。
然后,触发管道任务将根据变量值触发发布管道。
**注意:**如果在构建管道任务中考虑触发发布管道,需要在发布管道界面中关闭触发器。