Bru*_*uce 4 azure azure-devops
我正在使用 Azure DevOps Pipelines 来部署 ARM 模板。我的模板有一个标签参数,我使用它传递到管道中AzureResourceManagerTemplateDeployment@3。
我的 ARM 模板在参数部分有一个值作为对象。tags是一个对象,这是许多示例模板所显示的内容:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"resourceName": {
"type": "string",
"metadata": {
"description": "Specifies the name of the resource, including its prefix."
}
},
"tags": {
"type": "object",
"defaultValue": {
"Cost Center": "Admin"
}
}
},
"resources": [
{
"apiVersion": "2019-06-01",
"kind": "StorageV2",
"location": "[resourceGroup().location]",
"name": "[parameters('resourceName')]",
"properties": {
"supportsHttpsTrafficOnly": true
},
"sku": {
"name": "Standard_LRS"
},
"type": "Microsoft.Storage/storageAccounts",
"tags": "[parameters('tags')]"
}
]
}
Run Code Online (Sandbox Code Playgroud)
[编辑以匹配随后的线程]
我用于ubuntu-latest我的游泳池。标签可能有空格。
为了简单起见,在我的管道中,我将标签设置为变量。
pool:
vmImage: 'ubuntu-latest'
variables:
- name: tags
value: ("Location Region=West US 2" "Environment=${{ parameters.environment }}")
Run Code Online (Sandbox Code Playgroud)
当我调用模板部署时,我将标签作为overrideParameters
- task: AzureResourceManagerTemplateDeployment@3
displayName: "Deploy my templateaccount"
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'ResourceManager-connection'
subscriptionId: ${{ parameters.subscriptionid }}
action: 'Create Or Update Resource Group'
resourceGroupName: '$(resourceGroupName)'
location: '${{ parameters.location }}'
templateLocation: 'Linked artifact'
csmFile: 'mytemplatelocation/azuredeploy.json'
overrideParameters: -resourceName abcdefg76534 -tags "$(tags)"
deploymentMode: 'Incremental'
deploymentOutputs: resourceOutput
- pwsh: Write-Output '$(resourceOutput)'
Run Code Online (Sandbox Code Playgroud)
到目前为止,我还不明白AzureResourceManagerTemplateDeployment@3Ubuntu 上如何期望发送标签。
在每种情况下,模板都无法部署。
Azure DevOps Pipeline 是否支持此场景?
有人有建议吗?
Azure DevOps 管道中使用的标签格式AzureResourceManagerTemplateDeployment@3是对 ARM 模板对象(例如标签)使用 JSON。
但以下模板通过传入 JSON 对象来工作:{"Cost Center":"DevTest","Location":"West US"}作为模板参数。在上下文中,这看起来像:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'ResourceManager-connection'
subscriptionId: 'XXXXX'
action: 'Create Or Update Resource Group'
resourceGroupName: 'rg-wus2-exampletest'
location: 'West US 2'
templateLocation: 'Linked artifact'
csmFile: 'storageaccount/example.azuredeploy.json'
csmParametersFile: 'storageaccount/azuredeploy.parameters.json'
overrideParameters: '-resourceName oweruhsow -resourceTags {"Cost Center":"DevTest","Location":"West US"}'
deploymentMode: 'Complete'
Run Code Online (Sandbox Code Playgroud)
此管道模块需要 JSON 对象,而不是在其他地方使用 PowerShell ( https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resource ) 从命令部署的相同格式线。
另外,作为旁注,其他帖子建议您使用tags标签参数以外的名称。对我有用的是resourceTags. 这是我的 ARM 模板:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"resourceName": {
"type": "string",
"metadata": {
"description": "Specifies the name of the resource"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
},
"resourceTags": {
"type": "object",
"defaultValue": {
"Cost Center": "Admin"
}
}
},
"resources": [
{
"apiVersion": "2019-06-01",
"kind": "StorageV2",
"location": "[parameters('location')]",
"name": "[parameters('resourceName')]",
"properties": {
"supportsHttpsTrafficOnly": true
},
"sku": {
"name": "Standard_LRS"
},
"type": "Microsoft.Storage/storageAccounts",
"tags": "[parameters('resourceTags')]"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果要将模板对象设置为变量,则可以使用 DevOps 变量将其传递,例如$(tags):
variables:
tags: '{"Cost Center":"DevTest","Location":"West US"}'
steps:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'ResourceManager-connection'
subscriptionId: '9f241d6e-16e2-4b2b-a485-cc546f04799b'
action: 'Create Or Update Resource Group'
resourceGroupName: 'rg-wus2-exampletest'
location: 'West US 2'
templateLocation: 'Linked artifact'
csmFile: 'storageaccount/example.azuredeploy.json'
csmParametersFile: 'storageaccount/azuredeploy.parameters.json'
overrideParameters: '-resourceName oweruhso11w -resourceTags $(tags)'
deploymentMode: 'Complete'
Run Code Online (Sandbox Code Playgroud)
另外(作为旁注),由于某种原因,模块需要有一个,csmParametersFile否则它就会失败,并出现RESOURCEGROUP所有大写失败的情况。从命令行部署不需要参数文件,但管道模块似乎需要它。一个csmParamters文件中几乎什么都没有,但似乎是需要的。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": { }
}
Run Code Online (Sandbox Code Playgroud)
这也可以使用pool image: windows-latest
非常感谢https://github.com/MicrosoftDocs/azure-devops-docs/issues/9051中的 ToMakesSense
| 归档时间: |
|
| 查看次数: |
3840 次 |
| 最近记录: |