从 REST API 传入构建管道 yml 的变量未正确获取

时间:2021-04-08 23:49:56

标签: azure-devops yaml

我有 Azure DevOps 构建管道 yml,其中定义了参数、变量,同时我有一个外部工具,可以启动 yml 中的作业,包括传入一些参数。一开始我觉得yml里面的参数和传入的参数应该是一样的,所以我把所有的名字都排成一行来匹配。才发现通过REST API传入的参数其实是一个变量!

Int

然后我像这样声明了变量

parameters:
  - name: machineList
    type: string
    default: any

从传入的 REST API 和当我查询传入的请求时,调用 get 构建数据 api,我看到

variables:
  testsettingsjson: ${{ parameters.machineList }}

现在尝试使用它在某些地方有效而在其他地方无效的变量。

"parameters" : "{ \"machineList\" : \"machine1\" }"

我在上面看到的输出是:

  - script: |
      echo "Output variable values"
      echo "ML json : '$(testsettingsjson)'"
      echo "ML json : '$(machineList)'"
      echo "ML json variables : '${{ variables.machineList }}'"

所以 $(machineList) 有效,我想。

Output variable values
ML json : any
ML json : machine1
ML json variables:

当我使用 $env:TESTSETTINGSJSON 从上面的 powershell 脚本读取 TESTSETTINGSJSON 时,该值为“any”!

我超级困惑。我做错了什么?

2 个答案:

答案 0 :(得分:0)

<块引用>

才发现通过REST API传入的参数是 实际上是一个变量!

这是预期的。您在 rest api 的请求正文中指定的 parameters 实际上代表变量。如果要替换运行时参数,则应改用 templateParameters

enter image description here

$json= @'
        {
          "templateParameters": {
            "machineList": "machine1"
           }
        }

答案 1 :(得分:0)

解决了。为了使其发挥作用,我首先使用 3 个单独的“变量”集构建了我的解决方案,这是一个示例。

parameters:
  - name: MachineList
    type: string
    default: any
variables:
  ${{ if ne(variables['machineList'], '') }}:
    machinelist: $(machineList)
  ${{ if ne(parameters.MachineList, 'Any') }}:
    machinelist: ${{ parameters.MachineList }}
  • MachineList 是管道的输入。
  • machineList 是来自 Power Automate(或 REST API)的输入值。
  • machinelist 是 yml 中的局部变量。

现在在 yml 的其余部分,我可以使用 $(machinelist) 在管道值与 REST API 之间切换。