是否有方法获取任务中使用的SubscriptionID:“;Azure资源组部署“;
我正在Azure Devops中使用Azure资源组部署任务。一些覆盖模板参数包括SubscriptionID是否有方法获取任务中使用的SubscriptionID:“;Azure资源组部署“;,azure,azure-devops,azure-pipelines-build-task,Azure,Azure Devops,Azure Pipelines Build Task,我正在Azure Devops中使用Azure资源组部署任务。一些覆盖模板参数包括SubscriptionID -virtualNetworkId /subscriptions/53614803-d327-4397-bf55-8dedcc24be0d/resourceGroups/$(resourceGroup)/providers/Microsoft.Network/virtualNetworks/vnet 是否存在使用Azure订阅连接中使用的SubsectionID的was 原因: 需
-virtualNetworkId /subscriptions/53614803-d327-4397-bf55-8dedcc24be0d/resourceGroups/$(resourceGroup)/providers/Microsoft.Network/virtualNetworks/vnet
是否存在使用Azure订阅连接中使用的SubsectionID的was
原因:
需要在生成管道中知道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没有办法告诉您。解决方案:我创建了一个带有输出变量和空参数文件的空白模板: template.json: parameters.json 然后我运行任务: 1。Azure资源组部署运行空模板 2。ARM输出->将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
然后我调用realAzure资源组部署来运行我的实际模板
现在,我可以使用管道语法(即$(parmName))设置覆盖模板参数属性:
Powershell az命令
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)
此命令将输出默认订阅id:
convertfrom-json (az account list --query "[?isDefault].id | [0]")
它可以在中使用,查询语言为。您可以使用此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)
您想在生成任务中获取subscriptionid?是的,它需要用作生成属性,类似$(subscriptionid)那么“subscriptionid”呢“{inputs.subscriptionid}}”,我将如何在问题的字符串中使用它?ie“-virtualNetworkId…”您需要创建一个变量并将其传递给变量(“virtualNetworkId”)。您可以接受它作为答案,这样它可以帮助其他遇到相同问题的社区成员,我们可以存档此线程,谢谢。您需要此(或其他)信息来了解订阅,和资源名称(如果在模板中使用uniqueString)。请注意上面的参数。我能说一下这是一个多么复杂的系统。我能投票让事情变得更简单些吗?
convertfrom-json (az account list --query "[?isDefault].id | [0]")
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)