我有 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”!
我超级困惑。我做错了什么?
答案 0 :(得分:0)
才发现通过REST API传入的参数是 实际上是一个变量!
这是预期的。您在 rest api 的请求正文中指定的 parameters
实际上代表变量。如果要替换运行时参数,则应改用 templateParameters
。
$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 }}
现在在 yml 的其余部分,我可以使用 $(machinelist) 在管道值与 REST API 之间切换。