循环Azure管道任务中的多个参数

时间:2020-08-14 11:35:45

标签: azure azure-devops azure-devops-pipelines

我正在尝试创建Azure管道。但是我在循环执行Azure任务时遇到问题。我在下面通过一个简化的示例解释了我面临的问题。

我希望通过此管道创建多个Azure Web应用程序。每个Web应用程序都有一个使用--startup-file传递给它的命令,并且该命令包含一个参数。触发管道时,将作为运行时参数提供要创建的应用程序数和传递给每个应用程序的参数
例如。 如果NUMBER = 3且ARGUMENTS = 24,56,123
那么每个Azure Web应用--name--startup-file都应如下

--name myapp-1 --startup-file 'java -jar my.jar --arg 24   
--name myapp-2 --startup-file 'java -jar my.jar --arg 56   
--name myapp-3 --startup-file 'java -jar my.jar --arg 123   

管道会提示用户输入要创建的Web应用程序的数量,并以逗号分隔的参数字符串传递给它们。 main.yaml中定义的Azure管道步骤将这两个参数传递给模板(createapps.yaml)。然后必须基于此模板创建定义数量的应用程序。

main.yaml如下

parameters:
- name: NUMBER
  type: number
- name: ARGUMENTS
  type: string

steps:
- template: createapps.yaml
  parameters:
    NUMBER: ${{ parameters.NUMBER }}
    ARGUMENTS: ${{ parameters.ARGUMENTS }}

createapps.yaml如下

parameters:
- name: NUMBER
  type: number
- name: ARGUMENTS
  type: string

steps:
- task: AzureCLI@2
  displayName: Create Apps
    az webapp create \
      --name myapp-<Number> \
      --plan myplan \
      --resource-group myrg \
      --deployment-container-image-name myimage:latest \
      --startup-file 'java -jar my.jar --arg <Argument>'

如何通过迭代createapps.yamlNUMBERARGUMENTS中循环任务并在Azure CLI命令中分配

1 个答案:

答案 0 :(得分:1)

用{,“将ARGUMENTS分割成一个数组,并使用for循环。像这样:

- task: AzureCLI@2
  displayName: Create Apps
  inputs:
    azureSubscription: $(azureServiceConnection)
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      arr=(${ARGUMENTS//,/ })
      for ((i=1; i<=${{ parameters.NUMBER }}; i++ ))
      do
        az webapp create \
          --name "myapp-$i" \
          --plan myplan \
          --resource-group myrg \
          --deployment-container-image-name myimage:latest \
          --startup-file "java -jar my.jar --arg ${arr[i-1]}"
      done