我可以使用 Azure Devops 管道动态迭代设置变量的步骤吗?
在下面的管道中,我将逗号分隔的字符串拆分为多个作业步骤:
variables:
- name: fruitList
value: mango,peach
stages:
- stage: Dev
dependsOn: []
jobs:
- job: Setup
steps:
- task: AzureCLI@2
name: SetVariable
displayName: SetVariable
inputs:
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -xe
set -o nounset
# publish a list of fruits
echo "##vso[task.setvariable variable=fruitList;isOutput=true]apple,banana,orange"
- job: CreateDynamicJobs
dependsOn: Setup
# variables:
# - name: fruitList
# value: $[ dependencies.Setup.outputs['InstallTerrafom.fruitList'] ]
steps:
- ${{ each fruitName in split(variables.fruitList, ',') }}:
- task: AzureCLI@2
displayName: "Step dynamic ${{ fruitName }}"
inputs:
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -xe
set -o nounset
echo "${{ fruitName }}"
上述管道将成功,同时回显初始变量值:
mango
和peach
。但我想通过取消注释设置变量来迭代 apple
banana
和 orange
。
将会有一个名为
Step dynamic $[ dependencies.Setup.outputs['InstallTerrafom.fruitList'] ]
的步骤
从您的 YAML 示例中,您正在使用日志记录命令来设置变量:
fruitList
。该变量将在运行时设置并扩展。
但是each表达式会在编译时读取变量。
在这种情况下,each 表达式将读取初始变量值,而无法读取更新后的变量值。
恐怕没有任何方法可以使用 Azure DevOps 管道动态迭代运行时变量的步骤。
目前,each 表达式可以循环Parameters中的值或Variables字段中设置的变量。
例如:
variables:
fruitList: apple,banana,orange
我完全理解您的要求。您可以在网站开发者社区提交建议票来报告此功能