我正在尝试通过将标签通过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."
}
}
如果可以的话,将所有这些标签放入这样的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
。
也许在您的情况下不会发生,但我已经看到它与密码变量一起发生。