Azure Pipeline中如何提取TEST_开头变量并按原格式存储为新变量
实现方案
完整修改后的流水线定义
resources: repositories: - repository: templates type: git name: pipeline_templates ref: refs/heads/master trigger: - none variables: - template: templates/var1.yml@templates pool: name: PoolA steps: # 第一步:过滤TEST_开头变量,生成JSON并存储为输出变量 - pwsh: | # 把全量变量转为PowerShell对象 $allVars = '${{ convertToJson(variables) }}' | ConvertFrom-Json # 初始化空对象存储筛选后的变量 $testVars = [PSCustomObject]@{} # 遍历所有属性筛选TEST_开头的键 $allVars.PSObject.Properties | Where-Object Name -like 'TEST_*' | ForEach-Object { $testVars | Add-Member -NotePropertyName $_.Name -NotePropertyValue $_.Value } # 转成JSON字符串 $filteredJson = $testVars | ConvertTo-Json -Compress # 输出到日志便于调试 Write-Host "筛选后的TEST变量JSON: $filteredJson" # 存储为流水线输出变量,供后续步骤调用 Write-Host "##vso[task.setvariable variable=FilteredTestVars;isOutput=true]$filteredJson" name: FilterVarsStep # 必须指定步骤名,后续步骤引用变量需要用到 # 示例:后续步骤使用筛选后的变量 - pwsh: | # 读取上一步生成的JSON变量 $testVars = '$(FilterVarsStep.FilteredTestVars)' | ConvertFrom-Json # 方法1:直接获取指定变量值 Write-Host "数据库地址:$($testVars.TEST_DB_HOSTNAME)" Write-Host "ActiveMQ端口:$($testVars.TEST_ACTIVEMQPORT)" # 方法2:遍历所有TEST_开头的变量 Write-Host "=== 遍历所有TEST变量 ===" $testVars.PSObject.Properties | ForEach-Object { Write-Host "变量名:$($_.Name),变量值:$($_.Value)" }
功能说明
- 生成的
FilteredTestVars变量为标准JSON格式,结构完全符合要求,内容仅包含TEST_开头的键值对 - 同一流水线后续所有任务都可以通过
$(FilterVarsStep.FilteredTestVars)引用该变量 - 既可以直接提取单个
TEST_变量的值,也可以遍历所有TEST_变量批量处理
内容的提问来源于stack exchange,提问作者JCDani
相关产品推荐
相关产品推荐

