如何在 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 中有条件地插入模板?