IaC 部署应该是 CI 生成还是发布的一部分?

Should the IaC deployment be part of the CI build or the release?

提问人:user22830509 提问时间:10/31/2023 更新时间:10/31/2023 访问量:45

问:

我有一个用例,我想请您提供建议。我在 Azure 应用服务中托管了一个 .NET 应用程序。

我想控制基础结构的配置状态(Azure 应用服务 + 一些依赖项,如 Azure 存储 Application Insights)。我有一个 Azure ARM 模板,可以使用增量模式进行部署。

有两种不同的选项:

  1. 将 ARM 模板部署包含在生成管道中。
  2. 将 ARM 模板部署包含在发布管道中。

可能还有另一种选择 - 创建管道或发布并计划它(假设每晚触发它以部署 ARM 模板)。

您如何看待此案?这里的最佳实践是什么?

我想知道我应该在哪里运行 ARM 模板部署以及原因。

azure-devops azure-appservice

评论


答:

0赞 Miao Tian-MSFT 10/31/2023 #1

最佳做法应该是选择最适合您需求的方法。

  1. 将 ARM 模板部署包含在生成管道中。

如果使用的是经典生成管道,它可以确保在更新代码时更新基础结构。同时,缺点是无论更新的代码是否与 arm 模板相关,都会重复部署。

如果使用的是 YAML 生成管道,则可以使用多阶段管道,该管道将生成和发布阶段合并到单个 YAML 文件中。这样,您可以在一个位置定义整个部署周期,并对 CI 和 CD 使用相同的语法和格式。多阶段管道还支持环境、部署策略和审批等功能。YAML 编辑器需要更熟悉 YAML 文件的语法和结构。请参阅示例:使用 Azure DevOps 创建多阶段管道See sample: Create a multistage pipeline with Azure DevOps

  1. 将 ARM 模板部署包含在发布管道中。

这样,就可以使用生成管道中的项目,并将其部署到各个阶段,例如开发、测试和生产。发布管道还可以具有其他功能,例如审批、用于控制部署过程的入口。经典发布流水线允许您使用图形界面来定义流水线步骤和任务,与 yaml 相比,这很容易使用。请参阅此处的文档。

您可以参考以下类似问题:Azure DevOps 中的管道和发布管道之间有什么区别?和Azure DevOps中的生成管道和发布管道有什么区别?

然后,您可以决定哪种更适合您的情况。

评论

0赞 user22830509 11/3/2023
看起来我应该为 ARM 模板创建一个新的存储库。创建 CI 管道以将模板发布为项目,然后创建发布管道以按计划部署该模板。