Azure DevOps动态发布管道创建

时间:2020-10-19 18:45:07

标签: azure azure-devops yaml azure-web-app-service arm-template

我目前正在计划一种多租户系统,如果通过ARM模板为客户部署了带有一组AppService的不同资源组。因此,每个客户都有自己的资源组和AppServices集。当前,我们将Azure DevOps部署到用于生产和质量保证的一组AppService,然后再投入生产。我现在正尝试将DevOps纳入组合,以自动化某种形式的管道创建...(它是现有管道的副本,但仅更改目标AppServices)。这是我的问题来自哪里,是否有一种方法可以动态创建或编辑Release管道以添加这些新AppServices的部署,而无需手动编辑或创建管道来添加这些新创建的AppServices,我在想什么能够复制yaml文件模板,然后在创建这些AppService之后替换必要的信息以指向这些AppService,但我不太确定我可以在哪里存储新的yaml文件,以便Azure将其拾取DevOps,或者我将如何实现这些目标,主要思想是所有这些都将继续作为自动化流程的一部分(如果可能)。

非常感谢您的帮助,任何建议都将得到感谢。

编辑:

问题不是关于如何通过DevOps发布管道部署ARM模板(我计划使用PowerShell脚本/ REST API来完成此任务),而是关于创建AppServices资源时,我需要进行部署这些新创建的AppService的代码,并在必要时更新该代码(希望通过发布管道),每次我部署新的资源集时,都会以某种方式生成新的发布管道。这样,当有新的更新时,我可以轻松触发该管道并设置是否可以更新AppServices(作为“动态”自动化过程的一部分创建)。 (我已经有一个类似的管道,可以部署到一组“静态”的AppServices中)

1 个答案:

答案 0 :(得分:0)

您可能无法使用YAML管道,这是可能的。根据您已订阅的方案,每个存储库都有其自己的pipeline.yml文件,该文件将定义触发器,池等。它还将引用一个存储yaml模板的存储库。

模板将接受您可能需要的任何参数(资源组,应用程序服务名称等)。与每个存储库关联的触发管道将利用团队信息传递此信息。

通过执行此CI / CD,可以设置为在各个管道上触发并部署所有适当的代码,同时利用相同的YAML模板。

存储库参考类似于:

resources:
  repositories:
  - repository: YAMLTemplates
    type: git
    name: OrginazationName/YAML Project Name

对模板的调用类似于:

- template: azure-ARM-template.yml@YAMLTemplate
  parameters:
    appServiceName: 'AppServiceName'
    resourceGroupName: 'ResourceGroupName'

更新
在较高级别上,YAML管道将包括以下内容。如果所有的应用程序服务都与声明的相似并且ARM模板也相似,则可以基于文件夹路径构造和触发它:

在适当的阶段释放每个环境的部署部分,以帮助减轻复制和粘贴上述每个任务的数量,这些任务可以是模板的一部分,既可以单独完成一个任务,也可以合并多个任务,也可以全部合并。这将允许一次定义YAML并对其进行引用,并根据需要包含特定于应用程序的组件作为模板的参数。