Azure DevOps Pipeline 从模板参数解析键值对以创建新的字符串变量

问题描述 投票:0回答:1

我想从下面的管道代码将一些键值对对象作为参数传递到我的模板。

azure-pipeline.yml

jobs:
- template: custom-template.yml
  parameters:
    customProperties:
       - key1: value1
       - key2: value2

下面是作为我的模板一部分的伪代码。

自定义模板.yml

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

jobs:
  - job: MyJob
    steps:
      - task: CmdLine@2
        displayName: "Get all parameter values"
        inputs:
          targetType: "inline"
          script: |
             args = (${{ parameters.customProperties }} ) #TODO: loop key value pairs, create variable.
             echo "##vso[task.setvariable variable=ARGS;isoutput=true]args"
      - task: CmdLine@2
        displayName: "Use the parameter values"
        inputs:
          targetType: "inline"
          script: |
             echo $(ARGS) # from previous task

通过上述管道

object
输入,在我的实际模板处理中,我想形成一个如下格式的字符串变量,并在模板的后续步骤中使用该值。

-Dkey1=value1 -Dkey2=value2

有几个示例可以循环参数值并有条件地包含其他任务。但我的要求是根据参数值创建一个变量。

azure-devops azure-pipelines
1个回答
0
投票

我遇到了这个问题。 这个问题的答案有两个方面

  1. 您正在传递包含单个密钥对的字典列表。从json的角度看对我来说更容易
# list of dictionary yaml
paramemters:
  someParam:
  - key1: value1
  - key2: value2

{
  "someParam": {
   "key1": "value1"
  },
  {
   "key2": "value2"
  }
}

相反,你想要

# list of dictionary yaml
paramemters:
  someParam:
    key1: value1
    key2: value2

原来如此

{
  "someParam":{ 
   "key1": "value1",
   "key2": "value2"
  }
}
  1. 您需要在脚本之外进行循环
parameters:
  - name: someParam
    type: object
steps:
  - {{ each param in parameters.someParam }}
    - script: |
        echo "you can access each {{param.key}} {{param.value}}"
© www.soinside.com 2019 - 2024. All rights reserved.