如何在 Azure Pipelines Yaml 上循环多个 Azure 订阅?

Posted

技术标签:

【中文标题】如何在 Azure Pipelines Yaml 上循环多个 Azure 订阅?【英文标题】:How to loop through multiple Azure subscriptions on Azure Pipelines Yaml? 【发布时间】:2022-01-21 16:53:39 【问题描述】:

我有一个 yaml 管道,它仅用于在订阅上运行脚本。我为此使用了AzurePowerShell@5 任务。

问题是我有 22 个其他订阅我需要使用完全相同的脚本参数运行相同的脚本。唯一不同的是目标 azureSubscription 字段。有没有更快的方法,而不是拥有 22 个具有不同订阅名称的相同任务块?我可以将 22 个订阅的名称放在变量部分的数组中并以某种方式循环它们吗?请指教

stages:

- stage: Deploy
  displayName: 'Deploy Pipeline - Access Worker'

  jobs:
  - job: AccessWorker
    displayName: 'Access Worker'

    steps:
    - download: current
      artifact: 'AccessWorker'

    - task: AzurePowerShell@5
      displayName: 'Access Worker'
      inputs:
        azurePowerShellVersion: LatestVersion
        azureSubscription: 'My Azure Subscription 1'
        scriptPath: '$(Pipeline.Workspace)/AccessWorker/.src/Access_Worker/access_worker.ps1'
        scriptArguments: >
          -RoleDefinitionName 'Reader'
          -TagName 'Owner'

    - task: AzurePowerShell@5
      displayName: 'Access Worker'
      inputs:
        azurePowerShellVersion: LatestVersion
        azureSubscription: 'My Azure Subscription 2'
        scriptPath: '$(Pipeline.Workspace)/AccessWorker/.src/Access_Worker/access_worker.ps1'
        scriptArguments: >
          -RoleDefinitionName 'Reader'
          -TagName 'Owner'

    - task: AzurePowerShell@5
      displayName: 'Access Worker'
      inputs:
        azurePowerShellVersion: LatestVersion
        azureSubscription: 'My Azure Subscription 3'
        scriptPath: '$(Pipeline.Workspace)/AccessWorker/.src/Access_Worker/access_worker.ps1'
        scriptArguments: >
          -RoleDefinitionName 'Reader'
          -TagName 'Owner'

【问题讨论】:

您是从查看文档开始的吗? @DanielMann 我做到了。文档中的大多数示例都显示了如何在属性本身内循环(如在 scriptArguments 或 scriptPath 内),但我还没有弄清楚如何循环这些属性本身。尽管我觉得自己走在正确的轨道上,但我会继续努力。 【参考方案1】:

我想通了——这很容易。这是解决方案:

parameters:
  - name: subscriptions
    type: object
    default:
      - 'My Azure Subscription 1'
      - 'My Azure Subscription 2'
      - 'My Azure Subscription 3'

stages:
  - stage: Deploy
    displayName: "Deploy Pipeline - Get Resource Count"

    jobs:
      - job: ResourceCount
        displayName: "Subscription Loop Test"

        steps:
          - $ each subscription in parameters.subscriptions :
            - task: AzurePowerShell@5
              displayName: "Get Resource Count"
              inputs:
                azurePowerShellVersion: LatestVersion
                azureSubscription: $ subscription 
                scriptType: InlineScript
                Inline: |
                  Write-Host "Subscription Name: $((Get-AzContext).Subscription.Name)"
                  Write-Host "Resource Count: $((Get-AzResource).Count)"

【讨论】:

以上是关于如何在 Azure Pipelines Yaml 上循环多个 Azure 订阅?的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps Pipelines - 仅在上一次运行成功时运行 YAML 管道

Azure Pipelines Stages (YAML) 上的手动触发器

Azure Pipelines 将 YAML 用于具有不同变量值但没有 YAML 重复的多个环境(阶段)

如何:在 Azure DevOps YAML 中有条件地插入模板?

如何为 Azure Pipelines 中的每个阶段使用不同的服务连接?

Azure DevOps、YAML 发布管道? [关闭]