You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将动态获取的pom文件列表传入Azure DevOps YAML模板?

实现Azure DevOps流水线动态获取变更POM文件并执行SonarQube分析

主模板改造(传递变更POM文件列表)

在PowerShell任务中将收集到的POM文件列表输出为流水线多值输出变量,再引用子模板时传递该变量:

trigger:
  none
jobs:
- job: 'CollectChangedPoms'
  displayName: 收集变更的POM文件
  pool:
    vmImage: 'ubuntu-latest'
  steps:
    - task: PowerShell@2
      displayName: '获取Pull Request变更文件'
      name: GetChangedPoms # 定义任务名称,用于后续引用输出变量
      inputs:
        targetType: inline
        pwsh: true
        script: |     
          # 实际场景通过Azure DevOps API获取PR变更文件,此处用示例数据
          $files = @("folder1/pom.xml", "folder2/pom.xml")
          # 过滤出仅包含pom.xml的文件
          $pomFiles = $files | Where-Object { $_ -like "*pom.xml" }
          # 将POM文件列表输出为流水线多值变量
          $pomFilesJoined = $pomFiles -join ','
          Write-Host "##vso[task.setvariable variable=changedPomFiles;isOutput=true;isMultiValued=true]$pomFilesJoined"
  # 引用子模板并传递参数
  template: maventemplate.yml
  parameters:
    pomFiles: $[ dependencies.CollectChangedPoms.outputs['GetChangedPoms.changedPomFiles'] ]

子模板(maventemplate.yml)实现(循环执行SonarQube分析)

子模板定义参数接收POM文件列表,通过each循环遍历每个文件,执行对应的Maven SonarQube分析任务:

parameters:
  - name: pomFiles
    type: object
    default: []

jobs:
- job: SonarQubeAnalysis
  displayName: 执行SonarQube分析
  pool:
    vmImage: 'ubuntu-latest'
  steps:
    - ${{ each pomFile in parameters.pomFiles }}:
      - task: Maven@3
        displayName: 分析项目 ${{ pomFile }}
        inputs:
          mavenPomFile: '${{ pomFile }}'
          goals: 'clean verify sonar:sonar'
          options: '-Dsonar.projectKey=$(SonarProjectKey) -Dsonar.host.url=$(SonarHostUrl) -Dsonar.token=$(SonarToken)'

关键说明

  • PowerShell任务中通过isMultiValued=true标记变量为多值类型,用逗号分隔列表元素
  • 主模板中通过任务名称(GetChangedPoms)和变量名(changedPomFiles)引用输出变量
  • 子模板使用${{ each }}语法遍历POM文件列表,为每个文件创建独立的Maven分析任务

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:42:41