是否有方法获取任务中使用的SubscriptionID:“;Azure资源组部署“;

是否有方法获取任务中使用的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 原因: 需

我正在Azure Devops中使用Azure资源组部署任务。一些覆盖模板参数包括SubscriptionID

-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)