首页 > 解决方案 > 循环遍历 Azure 管道中的变量

问题描述

我有一个包含两个名称的文本文件,client1并且client2.

我有一个用于读取文本文件的 Powershell 脚本,我对它的理解是它已经创建了一个数组。

$clientvariable = Get-Content -Path {FilePath}/{File};
Write-Host "vso[task.setvariable variable=clientname]$clientvariable

所以现在 clientname 的值 $clientvariable 设置为client1 client2,如果需要,我可以索引每个位置。

如何在 Azure 管道 YAML 中使用它,以便可以单独查看每个名称并在下一个之后循环遍历?

目标是获取每个名称并使用文件中的名称创建一个资源,并结合 ARM 模板,即client1SQLserver client2SQLserver

我已经看到您可以使用带有参数的模板来创建 for 循环,所以在这种情况下可以使用,还是有其他方法可以做我正在寻找的事情?

标签: azurepowershellazure-devopsdevops

解决方案


如何在 Azure 管道 YAML 中使用它,以便可以单独查看每个名称并在下一个之后循环遍历?

我们可以指定一个作业基于在前一个作业中设置的输出变量的值运行,以单独循环每个名称。

由于我没有文本文件名,因此我在示例中使用自定义字符数组而不是文件名,例如$FileNames = '"test1","test2","test3","test4"'

我的 Azure 管道 yaml 文件:

trigger:
    branches:
      include:
        - master


    stages:
      - stage: LoopFileName
        jobs:
        - job: A
          pool:
            name: MyPrivateAgent
          steps:
          - task: PowerShell@2
            condition: succeeded()
            displayName: "Create a list"
            inputs:
              targetType: 'inline'
              script: |
                  $FileNames = '"test1","test2","test3","test4"'
                      Write-Host "##vso[task.setvariable variable=LoopFileName;isOutput=true]$FileNames"                
            name: fileoutput
    
        - job: B
          dependsOn: A
          pool:
            name: MyPrivateAgent
          variables: 
            AllFileNames: $[dependencies.A.outputs['fileoutput.LoopFileName']]
          steps:
          - template: loopTemplate.yml
            parameters: 
              files : $(AllFileNames)

然后loopTemplate.yml文件:

parameters:
  files: []

steps :
- task: PowerShell@2
  displayName: 'Fetching ValueFiles'
  inputs:
    targetType: 'inline'
    script: >

      foreach ($i in ${{parameters.files}})
      {
        Write-Host "filenames=$i"
      }

测试结果:

在此处输入图像描述

在这种情况下,我们可以创建一个具有名称的资源。

您可以查看文档条件以获取更多详细信息。


推荐阅读