Azure DevOps在特定路径包含更改时释放管道触发器

wbrvyc0a  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我在Azure DevOps中设置了一个存储库,其中包含多个应用程序的一些配置。对于每个应用程序,设置不同的发布管道。每一个都有一个自动触发器,当仓库内的更改被推送时。我希望只触发更改所涉及的应用程序的发布管道。在repo中,每个应用程序都有自己的文件夹。有没有可能以某种方式为这些发布管道指定一个触发器过滤器,以便应用程序的发布管道仅在repo中的文件夹发生更改时才被触发,而不是在repo中发生任何更改时?这是可能的,还是必须通过自定义脚本来实现?

pu82cl6c

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变量。
然后,触发管道任务将根据变量值触发发布管道。

**注意:**如果在构建管道任务中考虑触发发布管道,需要在发布管道界面中关闭触发器。

相关问题