azure - 有没有办法获取任务中使用的 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没有办法告诉你。
解决方案
您可以使用此 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)
推荐阅读
- sql - 与 CTE 一起与 CREATE/INSERT 一起使用
- selenium - 为了稳定性,如何使 Selenide 测试慢一点
- python - 在 pandas 的散点矩阵中添加回归线
- vb.net - 如何解析 .srt 字幕文件
- ruby-on-rails - 如何修复 Sublime Text 的“以当前扩展名打开所有...”功能?
- azure - Azure 中的 System.OutOfMemoryException 但不是本地
- java - 我如何返回列表中的动物名称
使用列表 指定看守 java8 - mysql - Codeigniter 批处理更新以前的记录状态
- reactjs - Ag-grid Details Grid 中的无限滚动
- sql-server - 使用分隔符将 VARCHAR 类型的数据库表列值拆分为多个值?