Azure DevOps Pipelines:迭代变量的步骤

问题描述 投票:0回答:1

我可以使用 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'] ]

的步骤
azure-devops azure-pipelines
1个回答
0
投票

从您的 YAML 示例中,您正在使用日志记录命令来设置变量:

fruitList
。该变量将在运行时设置并扩展。

但是each表达式会在编译时读取变量。

在这种情况下,each 表达式将读取初始变量值,而无法读取更新后的变量值。

恐怕没有任何方法可以使用 Azure DevOps 管道动态迭代运行时变量的步骤。

目前,each 表达式可以循环Parameters中的值或Variables字段中设置的变量。

例如:

variables:
   fruitList: apple,banana,orange

我完全理解您的要求。您可以在网站开发者社区提交建议票来报告此功能

© www.soinside.com 2019 - 2024. All rights reserved.