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