使用来自DevOps发布管道的多个变量标记Azure资源

问题描述 投票:0回答:1

我正在尝试通过将标签通过Azure DevOps管道传递来将标签分配给Azure资源,但是无法在ARM模板中定义正确的表达式。

DevOps发布管道中使用了Azure资源组部署任务,以将资源部署到Azure。为标签定义了几个管道变量,以应用于该资源。通过覆盖任务中的模板参数,这些变量将传递到ARM模板。 ARM模板定义了一个“ tagsObject”参数,该参数具有包装在对象中的“ tagName”和“ tagValue”格式。问题是如何分配在ARM模板的“标签”部分中的tagsObject提供的所有标签?标准“标签”:“ [[parameters('resourceTags')]]”失败。我要做的是为每个对象提取键值对并将它们分配给它们对应的项目。能做到吗?

如何进行作业?"tags": "[union(parameters('tagsObject'),json('{\"tagName\":\"tagValue\"}'))]",

下面是Azure资源组部署任务的替代模板参数中使用的变量对象:

-tagsObject {"tags":[
    {"tagName":"Application","tagValue":"$(tagApplication)"},
    {"tagName":"Description","tagValue":"$(tagDescription)"},
    {"tagName":"Environment","tagValue":"$(environmentLongName)"},
    {"tagName":"Department","tagValue":"$(departmentLongCode)"},
    {"tagName":"Business Owner","tagValue":"$(tagOwnerBusiness)"},
    {"tagName":"Technical Owner","tagValue":"$(tagOwnerTechnical)"},
    {"tagName":"Platform","tagValue":"$(tagPlatform)"},
    {"tagName":"Project","tagValue":"$(tagProject)"},
    {"tagName":"Solution Type","tagValue":"$(tagSolutionType)"}
]}

这是ARM模板中的参数:

"tagsObject": {
            "type": "Object",
            "defaultValue": "{}",
            "metadata": {
                "description": "Specifies all tags {\"tagName\":\"\",\"tagValue\":\"\"} wrapped in an object."
            }
        }
azure devops azure-resource-manager arm-template
1个回答
0
投票

如果可以的话,将所有这些标签放入这样的PowerShell哈希表中:

$tagsObject = @{
  'Application'     = '$(tagApplication)'
  'Description'     = '$(tagDescription)'
  'Environment'     = '$(environmentLongName)'
  'Department'      = '$(departmentLongCode)'
  'Business Owner'  = '$(tagOwnerBusiness)'
  'Technical Owner' = '$(tagOwnerTechnical)'
  'Platform'        = '$(tagPlatform)'
  'Project'         = '$(tagProject)'
  'Solution Type'   = '$(tagSolutionType)'
}

然后用-tagsObject $tagsObject将变量分配给参数

使用Azure DevOps(ADO)变量来填写由PowerShell命令或脚本处理以部署ARM模板的标记值时的建议-您应使用单引号包装ADO变量。如果任何ADO变量碰巧包含$字符,则PowerShell将尝试将其视为PowerShell变量,并将其替换为可能为null或空值的值。单引号会将ADO变量替换视为文字字符串。

ADO变量:departmentLongCode = asdf$qwert

["$(departmentLongCode)"变为asdf,因为$qwert变量可能不存在。

'$(departmentLongCode)'成为预期的asdf$qwert

也许在您的情况下不会发生,但我已经看到它与密码变量一起发生。

© www.soinside.com 2019 - 2024. All rights reserved.