Azure devops 如何配置ARM模板和参数文件以跨不同环境创建多个service bus主题

Azure devops 如何配置ARM模板和参数文件以跨不同环境创建多个service bus主题,azure-devops,azure-resource-manager,servicebus,arm-template,azure-servicebus-topics,Azure Devops,Azure Resource Manager,Servicebus,Arm Template,Azure Servicebus Topics,My repo为两种不同的环境提供了不同的arm模板(azure部署json文件)。每个环境都有自己的服务总线名称空间。我想在arm模板中为每个环境生成相同的主题列表 我想在他们的透视arm模板中保留服务总线名称空间名称,但我不确定我这样做是否正确 主题列表将位于parameters.json文件中。我想对两个环境/模板使用相同的参数文件。我也不确定这是否可行。从中,可能无法使用相同的参数文件 我将其用作创建主题循环的参考 以下是armtemplate.json文件的示例: ... "para

My repo为两种不同的环境提供了不同的arm模板(azure部署json文件)。每个环境都有自己的服务总线名称空间。我想在arm模板中为每个环境生成相同的主题列表

我想在他们的透视arm模板中保留服务总线名称空间名称,但我不确定我这样做是否正确

主题列表将位于parameters.json文件中。我想对两个环境/模板使用相同的参数文件。我也不确定这是否可行。从中,可能无法使用相同的参数文件

我将其用作创建主题循环的参考

以下是armtemplate.json文件的示例:

...
 "parameters": {
        "serviceBusNamespaceName": {
            "type": "string",
            "defaultValue": "serviceBusName1",
            "metadata": {
                "description": "Name of the Service Bus namespace"
            }
        },
        "serviceBusTopics": {
            "type": "array",
            "metadata": {
                "description": "List of topics"
            }
        },
...
"resources": [
        {
            "apiVersion": "2017-04-01",
            "name": "[parameters('serviceBusNamespaceName')]",
            "type": "Microsoft.ServiceBus/namespaces",
            "location": "[resourceGroup().location]",
            "sku": {
                "name": "Standard"
            },
            "properties": {}
        },
        {
            "apiVersion": "2017-04-01",
            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('serviceBusTopics')[copyIndex()])]",
            "type": "Microsoft.ServiceBus/namespaces/topics",
            "location": "[resourceGroup().location]",
            "copy": {
                "name": "topicLoop",
                "count": "[length(parameters('serviceBusTopics'))]"
            },
            "properties": {},
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ]
        },
....
"parameters": {
        "serviceBusTopics": {
            "value": [
                "topic1",
                "topic2"
            ]
        }
    }
以下是parameters.json文件:

...
 "parameters": {
        "serviceBusNamespaceName": {
            "type": "string",
            "defaultValue": "serviceBusName1",
            "metadata": {
                "description": "Name of the Service Bus namespace"
            }
        },
        "serviceBusTopics": {
            "type": "array",
            "metadata": {
                "description": "List of topics"
            }
        },
...
"resources": [
        {
            "apiVersion": "2017-04-01",
            "name": "[parameters('serviceBusNamespaceName')]",
            "type": "Microsoft.ServiceBus/namespaces",
            "location": "[resourceGroup().location]",
            "sku": {
                "name": "Standard"
            },
            "properties": {}
        },
        {
            "apiVersion": "2017-04-01",
            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('serviceBusTopics')[copyIndex()])]",
            "type": "Microsoft.ServiceBus/namespaces/topics",
            "location": "[resourceGroup().location]",
            "copy": {
                "name": "topicLoop",
                "count": "[length(parameters('serviceBusTopics'))]"
            },
            "properties": {},
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ]
        },
....
"parameters": {
        "serviceBusTopics": {
            "value": [
                "topic1",
                "topic2"
            ]
        }
    }
我配置了Azure管道来构建和部署Azure资源。当我导航到Azure门户并检查每个服务总线时,我希望看到创建的主题。然而,这对我不起作用

我可以为不同的模板/环境使用相同的参数文件吗?
语法上,我有任何错误吗?

一种方法是使用参数文件,每个环境一个 然后在管道中指定正确的参数文件

另一种方法是根本不使用参数文件,只使用Azure DevOps内部的变量


我意识到这是一个简短的回答,希望现在还可以

因为每个环境都有自己的模板文件,您只需使用服务总线和主题参数更新所有文件,并像上面那样将主题列为资源。defaultvalue足以针对不同的服务总线。(可能不是最优雅的解决方案,但它确实有效)

我发现,我的模板最初不起作用的原因是,使用该模板的管道与我的目标服务总线不在同一资源组中

当部署到同一资源组时,我上面所做的工作是有效的