您可以使用与-${{ each x in y }}:
类似的语法在devops管道YAML中创建循环。据我了解,y
可以是一个数组。
但是,我发现没有each
的文档。唯一描述其用法示例的页面位于the "Templates" page.
所以我的问题是:如何指定数组?我知道一种方法是使用-${{ each book in parameters.books }}:
,然后像下面这样传递books
的“列表”:
- template: template.yml
parameters:
books:
- book1
- book2
- book3
但是,我也想将数组定义为变量:
variables:
books:
- book1
- book2
- book3
但是,为此,ADO抛出错误A sequence was not expected
。
没有办法定义这样的数组吗?我想我会把它们称为-${{ each book in variables.books }}:
,否则,还有其他方法可以指定列表吗?
答案 0 :(得分:3)
不支持将数组定义为变量,variable syntax是variables: { string: string }
。检查以下情况:
Yaml变量始终是字符串:字符串映射。
我们正准备在不久的将来发布功能,以使您能够 通过更复杂的结构。敬请期待!
当前,您只能使用参数来传递和循环数组:
parameters:
- name: 'param'
type: object
default:
- FOO
- BAR
- ZOO
steps:
- ${{ each p in parameters.param }}:
- script: echo ${{ p }}
答案 1 :(得分:2)
我克服变量数组限制的方法是将变量值字符串转换为管道中的数组。 参数不是一个选项,因为它们在流水线运行时暴露给用户。
在 Variables.prod.yaml 中:
variables:
- name: prod_vmnames
value: VM1, VM2, VM3
正在筹备中:
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "$(date +"%Y-%m-%d %H:%M:%S") - INFO - Script started"
# "Generating Prod VMs array"
IFS="," read -a vms_array <<< ${{ variables.prod_vmnames }}
echo "VMs array is: $vms_array"
# Run script on all VMs
chmod +x AzVmRun.sh
for vm in ${vms_array[@]}
do
echo "Launching script /Scripts/AzVmRun.sh on vm: $vm"
./AzVmRun.sh \
-v $vm -k ${{ variables.kvname }}
done
HTH。