a3y*_*3y3 7 azure azure-devops azure-pipelines
您可以使用类似于-${{ each x in y }}:. 根据我的理解,y可以是一个数组。
但是,我发现没有each. 描述其用法示例的唯一页面位于“模板”页面上。
所以我的问题是:我如何去指定一个数组?我知道一种方法是使用-${{ each book in parameters.books }}:然后传入books类似的“列表” :
- template: template.yml
parameters:
books:
- book1
- book2
- book3
Run Code Online (Sandbox Code Playgroud)
但是,我还想将数组定义为变量:
variables:
books:
- book1
- book2
- book3
Run Code Online (Sandbox Code Playgroud)
但是,为此,ADO 会抛出错误 A sequence was not expected。
有没有办法像这样定义一个数组?我想我会将这些称为-${{ each book in variables.books }}:如果没有,还有其他方法可以指定列表吗?
Cec*_*SFT 13
不支持将数组定义为变量,变量语法是variables: { string: string }. 检查以下情况:
Yaml 变量一直是字符串:字符串映射。
我们正准备在不久的将来发布一项功能,让您可以通过更复杂的结构。敬请关注!
目前,您只能使用参数来传递和循环数组:
parameters:
- name: 'param'
type: object
default:
- FOO
- BAR
- ZOO
steps:
- ${{ each p in parameters.param }}:
- script: echo ${{ p }}
Run Code Online (Sandbox Code Playgroud)
leo*_*ess 10
您不需要模板来拥有 for 循环。只需使用split 函数:
- stage:
variables:
- name: vars
value: dev, nonprod, production
jobs:
- job: print_vars
steps:
- ${{ each var in split(variables.vars, ', ') }}:
- script: |
echo ${{ var }}
displayName: Printing ${{ var }}
Run Code Online (Sandbox Code Playgroud)
您还可以使用变量对象本身作为映射,但这可能会导致问题。
- stage:
variables:
- name: DEV
value: dev
- name: NONPROD
value: nonprod
- name: PROD
value: production
jobs:
- job: print_vars
steps:
- ${{ each var in variables }}:
- script: |
echo ${{ var.key }}
echo ${{ var.value }}
displayName: Printing ${{ var.key }}
Run Code Online (Sandbox Code Playgroud)
小智 5
我克服变量数组限制的方法是将变量值字符串转换为管道中的数组。参数不是一个选项,因为它们在流水线运行时向用户公开。
在 Variables.prod.yaml 中:
variables:
- name: prod_vmnames
value: VM1, VM2, VM3
Run Code Online (Sandbox Code Playgroud)
在管线中:
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
Run Code Online (Sandbox Code Playgroud)
哈。
| 归档时间: |
|
| 查看次数: |
10759 次 |
| 最近记录: |