如何将JSON文件值传入Azure Pipeline并设为全局变量/参数
Azure Pipeline读取JSON文件值并设置全局变量/参数的方案
触发规则配置(按特定文件夹提交触发)
先修改Pipeline的触发规则,只在目标文件夹有提交时触发:
trigger: paths: include: - your-target-folder/** # 替换为你要监控的文件夹路径 exclude: - '*'
实现方式
方式1:设置为当前Job可用的变量
修改你的Pipeline配置,添加读取JSON并设置变量的步骤:
name: "test" trigger: paths: include: - your-target-folder/** # 替换为实际文件夹路径 exclude: - '*' variables: value1: '' value2: '' jobs: - job: example_job displayName: 'example_job' steps: - checkout: self # 用PowerShell读取JSON并设置变量 - task: PowerShell@2 displayName: '读取JSON文件并设置变量' inputs: targetType: 'inline' script: | # 读取目标JSON文件 $jsonContent = Get-Content -Path "$(Build.SourcesDirectory)/your-target-folder/file.json" -Raw | ConvertFrom-Json # 将JSON中的值设置为Pipeline变量 Write-Host "##vso[task.setvariable variable=value1;]$($jsonContent.example.vaule1)" Write-Host "##vso[task.setvariable variable=value2;]$($jsonContent.example.vaule2)" # 验证变量是否生效 - script: | echo "value1: $(value1)" echo "value2: $(value2)" displayName: '验证变量值'
方式2:设置为跨Job可用的全局输出变量
如果需要在多个Job中使用这些JSON值,需将变量标记为输出变量,后续Job通过依赖引用:
name: "test" trigger: paths: include: - your-target-folder/** # 替换为实际文件夹路径 exclude: - '*' jobs: - job: read_json_job displayName: '读取JSON文件' steps: - checkout: self - task: PowerShell@2 displayName: '读取JSON并设置输出变量' name: jsonVarSetter # 给步骤命名,用于后续引用 inputs: targetType: 'inline' script: | $jsonContent = Get-Content -Path "$(Build.SourcesDirectory)/your-target-folder/file.json" -Raw | ConvertFrom-Json # 标记为输出变量,允许跨Job引用 Write-Host "##vso[task.setvariable variable=value1;isOutput=true;]$($jsonContent.example.vaule1)" Write-Host "##vso[task.setvariable variable=value2;isOutput=true;]$($jsonContent.example.vaule2)" - job: example_job displayName: '使用JSON变量的Job' dependsOn: read_json_job variables: # 引用上一个Job的输出变量 globalValue1: $[ dependencies.read_json_job.outputs['jsonVarSetter.value1'] ] globalValue2: $[ dependencies.read_json_job.outputs['jsonVarSetter.value2'] ] steps: - script: | echo "全局value1: $(globalValue1)" echo "全局value2: $(globalValue2)" displayName: '使用全局变量'
注意事项
- 注意JSON文件中的拼写:你的示例中
vaule1/vaule2存在拼写错误(正确应为value1/value2),如果实际文件保持此拼写,脚本中需匹配一致,否则无法正确读取。 - 路径准确性:确保
$(Build.SourcesDirectory)/your-target-folder/file.json是文件在仓库中的实际路径,根据你的仓库结构调整。 - 若使用Bash环境,可通过
jq工具读取JSON,示例脚本:
value1=$(jq -r '.example.vaule1' $(Build.SourcesDirectory)/your-target-folder/file.json) value2=$(jq -r '.example.vaule2' $(Build.SourcesDirectory)/your-target-folder/file.json) echo "##vso[task.setvariable variable=value1;]$value1" echo "##vso[task.setvariable variable=value2;]$value2"
内容的提问来源于stack exchange,提问作者Vauler
相关产品推荐
相关产品推荐

