Azure开发管道中的循环和数组

rekjcdws  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(144)

您可以使用类似于-${{ each x in y }}:的语法在devops管道YAML中创建一个循环。
但是,我发现没有关于each的文档。
所以我的问题是:如何指定数组?我知道一种方法是使用-${{ 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 }}:,如果没有,有没有其他方法来指定一个列表?

ma8fv8wu

ma8fv8wu1#

不支持将数组定义为变量,变量语法为variables: { string: string }。请检查以下情况:
https://developercommunity.visualstudio.com/content/problem/812728/variables-in-yaml-pipeline-are-not-allowing-to-def.html
Yaml变量一直是字符串:字符串Map。
我们准备在不久的将来发布一个功能,让你通过更复杂的结构。敬请期待!
目前,只能使用参数传递和循环数组:

parameters:
- name: 'param'
  type: object
  default: 
  - FOO
  - BAR
  - ZOO

steps:
- ${{ each p in parameters.param }}:
  - script: echo ${{ p }}
nnt7mjpx

nnt7mjpx2#

我克服变量数组限制的方法是将变量值字符串转换为管道中的数组。参数不是一个选项,因为它们在管道运行时暴露给用户。
在变量. 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

嗯。

jjhzyzn0

jjhzyzn03#

你不需要模板就可以有一个for循环,只要使用split函数:

- stage:
  variables:
    - name: vars
      value: dev, nonprod, production

  jobs:
  - job: print_vars
    steps:
    - ${{ each var in split(variables.vars, ', ') }}:
      - script: |
          echo ${{ var.key }}
          echo ${{ var.value }}
        displayName: Printing ${{ var.key }}

您也可以使用variables对象本身作为Map,但这可能会导致问题。

- 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 }}

相关问题