有没有办法获取任务中使用的SubscriptionID:“ Azure资源组部署”

时间:2019-05-18 03:05:15

标签: azure azure-devops azure-pipelines-build-task

我正在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无法告诉您。

我的部署被构建为可以在不同Subscriptions中的任何ResourceGroup中运行。我正在使用在门户中创建一个VM的ARM模板部署多个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 无法告诉您。 >

3 个答案:

答案 0 :(得分:1)

您可以使用此 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)

答案 1 :(得分:0)

解决方案:我创建了一个带有输出变量和空参数文件的空白模板: template.json:

yy

parameters.json

yyyy

然后我运行任务:

1。 Azure资源组部署->运行空模板

2。 ARM输出->将ARM的输出捕获为变量:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {  },
  "variables": {  },
  "resources": [ ],
  "outputs": {
    "subscriptionId": {
      "condition": "[bool('true')]",
      "type": "string",
      "value": "[subscription().subscriptionId]"
    },
    "uniqueString": {
      "condition": "[bool('true')]",
      "type": "string",
      "value": "[uniqueString(resourceGroup().id)]"
    }
  }
}

然后,我调用真正的 Azure资源组部署来运行我的实际模板。

现在,我可以使用管道语法(即$(parmName):

)设置覆盖模板参数属性。
{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  }
}

答案 2 :(得分:0)

Powershell Az命令

此命令将输出默认的订阅ID:

convertfrom-json (az account list --query "[?isDefault].id | [0]")

它可以在Azure CLI task中使用,查询语言为JMESPath