首页 > 解决方案 > 有没有办法获取任务中使用的 SubscriptionID:“Azure 资源组部署”

问题描述

我在 Azure Devops 中使用Azure 资源组部署任务。一些Override 模板参数包含 SubscriptionID。

-virtualNetworkId /subscriptions/53614803-d327-4397-bf55-8dedcc24be0d/resourceGroups/$(resourceGroup)/providers/Microsoft.Network/virtualNetworks/vnet 

是否可以使用Azure 订阅连接中使用的 SubsciptionID ?

原因:subscriptionId 需要在构建管道中知道。这也解决了uniqueString模板问题,这里我们需要知道uniqueString,但是powershell没有办法告诉你。

我的部署正在构建以在不同订阅的任何资源组中运行。我正在使用生成的 ARM 模板部署多个 VM,在门户中创建一个 VM。如问题所示,其中一个参数嵌入了订阅 ID。由于在门户构建的模板中如何计算变量,[subscription.SubscriptionId] 无法正常工作:

  "variables": {
    "vnetId": "[parameters('virtualNetworkId')]",
    "subnetRef": "[concat(variables('vnetId'), '/subnets/', parameters('subnetName'))]",

它在运行时结束为:

/subscriptions/$(subscription().subscriptionid)/resourceGroups/Dev1/providers/Microsoft.Network/virtualNetworks/vnet/subnets/default

我不想编辑模板,因为我需要对未来的部署进行一些调整,并且可能会使用门户制作新模板。subscriptionId需要在构建管道中知道。这也解决了uniqueString模板问题,我们需要知道uniqueString,但powershell没有办法告诉你。

标签: azureazure-devopsazure-pipelines-build-task

解决方案


您可以使用此 YAML 管道从 Azure Cli 任务获取订阅并创建一个名为subscriptionId的管道变量

trigger:
- none

pool:
  vmImage: 'windows-latest'


stages:
- stage: Build
  displayName: Build stage

  jobs:
  - job: GetSubscription
    steps:
    - checkout: none
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'CTP.AssuranceDW-Non-Production'
        scriptType: 'ps'
        scriptLocation: 'inlineScript'
        inlineScript: |
          $id = convertfrom-json (az account list --query "[?isDefault].id | [0]")
          Write-Host $id
          echo "##vso[task.setvariable variable=subscriptionId]$id"
    - powershell: Write-Host $(subscriptionId)

推荐阅读