【问题标题】:How to pass object to overrideParameters for ARM deployment from yaml pipeline如何从 yaml 管道将对象传递给用于 ARM 部署的 overrideParameters
【发布时间】:2021-02-18 11:07:19
【问题描述】:

我有一个执行内联脚本的 yaml 管道,需要将该脚本的输出对象传递给 ARM 模板,但我找不到任何传递对象的示例,只有单个字符串。

yaml 脚本:

- task: AzurePowerShell@4
    displayName: 'Get CosmosDB Consistency'
    inputs:
      azureSubscription: 'ado-test'
      scriptType: 'inlineScript'
      azurePowerShellVersion: LatestVersion
      inline: | 
        Install-Module -Name Az.CosmosDB -RequiredVersion 0.1.6 -AllowClobber -Force
        Import-Module Az.CosmosDB
        $cosmosConsistency = (Get-AzCosmosDBAccount -ResourceGroupName $(domain)-${{ parameters.environment }} -Name $(domain)-${{ parameters.environment }}).ConsistencyPolicy
        Write-Host "##vso[task.setvariable variable=cosmosConsistency;isOutput=true]$cosmosConsistency"
      name: 'cosmosConsistency'

输出对象如下所示:{"DefaultConsistencyLevel":"Session","MaxStalenessPrefix":100,"MaxIntervalInSeconds":5}

带有参数覆盖的 ARM 部署:

- task: AzureResourceGroupDeployment@2
    displayName: 'Deploy: Main resources'
    inputs:
      azureSubscription: 'ado-test'
      resourceGroupName: '$(domain)-${{ lower(parameters.environment) }}'
      location: 'West Europe'
      csmFile: '$(Build.SourcesDirectory)/src/resources.json'
      csmParametersFile: '$(Build.SourcesDirectory)/src/resources.parameters.json'
      overrideParameters: '-cosmosConsistency $(cosmosConsistency))'

ARM模板中的参数定义:

cosmosConsistency": {
      "type": "object",
      "metadata": {
        "description": "The Cosmos DB consistency parameters object"
      }
    },

我得到的错误是 param 是 string 但 object 是预期的,所以我的 overrideParameters 定义或 ARM 模板中的 param 定义有问题。

有人可以帮助使用正确的语法吗?

如果我将所有 3 个值分别作为 3 个不同的字符串参数传递,它可以工作但很混乱,我宁愿传递整个对象。

【问题讨论】:

  • 未获得您的最新信息。只是想检查以下答案是否对您有帮助?如果是,您可以接受这个答案,这也可以使与您有相同困惑的其他人受益,我们可以存档此线程。另外,如果仍有任何疑问,请随时在下面发表评论:-)

标签: azure-devops azure-pipelines azure-pipelines-yaml


【解决方案1】:

要覆盖对象类型参数,请使用字符串化 JSON 对象。 例如,-options ["option1"] -map {"key1":"value1" }。

如果 "key1" 和 "value1" 之间有间隔,例如 "key": "value1",则会给出错误“在此上下文中不允许映射值”。所以正确的语法应该是 {"key1":"value1"}

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-resource-group-deployment?view=azure-devops

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多