有没有办法获取任务中使用的 SubscriptionID:"Azure Resource Group Deployment"
Is there a way to get the SubscriptionID used in task: "Azure Resource Group Deployment"
我正在 Azure Devops 中使用 Azure 资源组部署 任务。某些 覆盖模板参数包含 SubscriptionID。
-virtualNetworkId /subscriptions/53614803-d327-4397-bf55-8dedcc24be0d/resourceGroups/$(resourceGroup)/providers/Microsoft.Network/virtualNetworks/vnet
是否可以使用 Azure 订阅连接 中使用的 SubsciptionID?
原因:
subscriptionId 需要在构建管道中已知。这也解决了 uniqueString 模板问题,我们需要知道 uniqueString,但是 powershell 没有办法告诉你。
我的部署正在构建到 运行 在不同订阅的任何资源组中。我正在使用在门户中创建一个 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 不需要有办法告诉你
解决方案:我创建了一个包含输出变量和空参数文件的空白模板:
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 资源组部署 -> 运行s 空模板
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 资源组部署 调用到 运行 我的实际模板。
现在我可以使用管道语法设置 覆盖模板参数 属性,即 $(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)
...
Powershell az 命令
此命令将输出默认订阅 ID:
convertfrom-json (az account list --query "[?isDefault].id | [0]")
可用于Azure CLI task and the query language is JMESPath。
您可以使用此 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)
对于那些有多个订阅的人,您可以通过订阅名称查询(如果您完全可以这样做),然后获取单个未加引号的值
az account list --query "[?name == 'Azure subscription 1'].{Id:id}" -o tsv
从这里学到了一切link
https://docs.microsoft.com/en-us/cli/azure/query-azure-cli
我正在 Azure Devops 中使用 Azure 资源组部署 任务。某些 覆盖模板参数包含 SubscriptionID。
-virtualNetworkId /subscriptions/53614803-d327-4397-bf55-8dedcc24be0d/resourceGroups/$(resourceGroup)/providers/Microsoft.Network/virtualNetworks/vnet
是否可以使用 Azure 订阅连接 中使用的 SubsciptionID?
原因: subscriptionId 需要在构建管道中已知。这也解决了 uniqueString 模板问题,我们需要知道 uniqueString,但是 powershell 没有办法告诉你。
我的部署正在构建到 运行 在不同订阅的任何资源组中。我正在使用在门户中创建一个 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 不需要有办法告诉你
解决方案:我创建了一个包含输出变量和空参数文件的空白模板: 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 资源组部署 -> 运行s 空模板
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 资源组部署 调用到 运行 我的实际模板。
现在我可以使用管道语法设置 覆盖模板参数 属性,即 $(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)
...
Powershell az 命令
此命令将输出默认订阅 ID:
convertfrom-json (az account list --query "[?isDefault].id | [0]")
可用于Azure CLI task and the query language is JMESPath。
您可以使用此 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)
对于那些有多个订阅的人,您可以通过订阅名称查询(如果您完全可以这样做),然后获取单个未加引号的值
az account list --query "[?name == 'Azure subscription 1'].{Id:id}" -o tsv
从这里学到了一切link https://docs.microsoft.com/en-us/cli/azure/query-azure-cli