如何将动态获取的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
相关产品推荐
相关产品推荐

