如何在Azure DevOps模板中从键值对参数生成字符串变量
问题需求
通过azure-pipeline.yml向custom-template.yml模板传递customProperties参数(键值对对象数组),需要在模板内将这些键值对转换为-Dkey1=value1 -Dkey2=value2格式的字符串变量ARGS,供后续步骤调用。
原azure-pipeline.yml(无需修改)
jobs: - template: custom-template.yml parameters: customProperties: - key1: value1 - key2: value2
修改后的custom-template.yml(实现核心逻辑)
parameters: - name: customProperties type: object default: [] jobs: - job: MyJob steps: - task: CmdLine@2 displayName: "生成ARGS变量" inputs: targetType: "inline" script: | setlocal enabledelayedexpansion set "args=" ${{ each prop in parameters.customProperties }}: ${{ each keyValue in prop }}: set "args=!args! -D${{ keyValue.key }}=${{ keyValue.value }}" echo "##vso[task.setvariable variable=ARGS;isoutput=true]!args:~1!" - task: CmdLine@2 displayName: "使用ARGS变量" inputs: targetType: "inline" script: | echo $(ARGS)
实现说明
- 利用Azure Pipelines的模板循环语法
${{ each }},先遍历customProperties数组里的每个对象,再遍历对象中的键值对 - 启用延迟变量扩展(
enabledelayedexpansion)处理字符串拼接,避免批处理中的变量替换异常 !args:~1!用来剔除拼接后字符串开头的多余空格,保证最终格式符合要求- 通过
##vso[task.setvariable]命令将生成的字符串设为可跨步骤调用的输出变量ARGS
内容的提问来源于stack exchange,提问作者Purus
相关产品推荐
相关产品推荐

