Есть ли способ получить SubscriptionID, используемый в задаче: «Развертывание группы ресурсов Azure» - PullRequest
1 голос
/ 18 мая 2019

Я использую Развертывание группы ресурсов Azure в Azure Devops. Некоторые из параметров шаблона Override s включают SubscriptionID.

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

Возможно ли использовать SubsciptionID, используемый в подключении Azure ?

Причина: Идентификатор подписки должен быть известен в конвейере сборки. Это также решает проблему с шаблоном uniqueString, где нам нужно знать uniqueString, но PowerShell не может сообщить вам об этом.

Мои развертывания создаются для запуска в любой группе ресурсов в разных подписках. Я развертываю несколько виртуальных машин, используя шаблон ARM, созданный при создании одной виртуальной машины на портале. Один из параметров встроил идентификатор подписки, как показано в вопросе. Из-за того, как переменные рассчитываются внутри шаблона, созданного порталом, [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 не может сообщить вам.

1 Ответ

1 голос
/ 18 мая 2019

Решение: я создал пустой шаблон с выходными переменными и пустым файлом параметров: template.json:

{
  "$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)]"
    }
  }
}

parameters.json

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  }
}

Затем я запустил задачи:

1. Развертывание группы ресурсов Azure -> запускает пустой шаблон

2. ARM Outputs -> захватывает выходы ARM как переменные:

##[section]Starting: ARM Outputs
==============================================================================
Task         : ARM Outputs
Description  : This task reads the output values of an ARM deployment and sets them as Azure Pipelines variables.
Version      : 5.0.21
Author       : Kees Schollaart
Help         : [More Information](https://github.com/keesschollaart81/vsts-arm-outputs)
==============================================================================
1ef1317c-0917-4a7e-a922-a31b6069c707 exists true
Logging in using ApplicationTokenCredentials, authScheme is 'ServicePrincipal'
Updating Azure Pipelines variable 'subscriptionId'
Updating Azure Pipelines variable 'uniqueString'
##[section]Finishing: ARM Outputs

Затем я вызываю реальное Развертывание группы ресурсов Azure для запуска моего фактического шаблона.

Теперь я могу установить свойство шаблона Override , используя синтаксис конвейера, т.е. $ (parmName):

-location eastus 
-enableAcceleratedNetworking true 
-subnetName default 
-virtualNetworkId /subscriptions/$(subscriptionId)/resourceGroups/$(resourceGroup)/providers/Microsoft.Network/virtualNetworks/vnet 
-diagnosticsStorageAccountId /subscriptions/$(subscriptionId)**/resourceGroups/$(resourceGroup)/providers/Microsoft.Storage/storageAccounts/osdiag$(uniqueString) 
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...