如何使用VSTS将一个ARM模板的输出传递给Continuous Deployment中下一个ARM模板的输入参数?

时间:2018-04-10 17:32:09

标签: arm azure-devops azure-resource-manager azure-pipelines-release-pipeline

我有一个ServiceBuswithQueue ARM模板,其输出部分如下所示:

  "outputs": {
    "serviceBusNamespaceName": {
      "type": "string",
      "value": "[parameters('serviceBusNamespaceName')]"
    },
    "namespaceConnectionString": {
      "type": "string",
      "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryConnectionString]"
    },
    "sharedAccessPolicyPrimaryKey": {
      "type": "string",
      "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryKey]"
    },
    "serviceBusQueueName": {
      "type": "string",
      "value": "[parameters('serviceBusQueueName')]"
    }
  }

为此,我在VSTS中创建了持续集成(CI)和持续部署(CD),在CD中,我使用PowerShell任务部署了上述ARM模板。但我想传递这个ARM模板的输出,如" $(serviceBusQueueName)"在Continuous Deployment中输入下一个ARM模板的参数。

知道上面的场景可以在连续部署中的两个ARM任务之间使用ARM输出来实现。但我不想要它,因为目前我正在使用PowerShell任务来部署ARM模板。

在发布此问题之前,我进行了研究并找到了以下链接,但这些链接无法解决我的问题。

Azure ARM templates - using the output of other deployments

How do I use ARM 'outputs' values another release task?

有人可以建议我如何解决上述问题吗?

2 个答案:

答案 0 :(得分:1)

您可以通过指定相应的参数来覆盖参数。

Override template parameter in the script

答案 1 :(得分:1)

# Start the deployment
Write-Host "Starting deployment...";
$outputs = New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -Mode Incremental -TemplateFile $templateFilePath -TemplateParameterFile $parametersFilePath;

foreach ($key in $outputs.Outputs.Keys){
    $type = $outputs.Outputs.Item($key).Type
    $value = $outputs.Outputs.Item($key).Value
    Write-Host "##vso[task.setvariable variable=$key;]$value"
}

您可以在后续脚本中显示所有环境变量:

Write-Host "Environment variables:"
gci env:* | sort-object name