我正在努力为 Azure 中的 Web 应用程序设置 CI 流程。我习惯于将构建的代码直接部署到 Azure 中的 Web 应用程序中,但这次决定使用 docker。
在构建管道中,我构建 docker 映像并将它们推送到 Azure 容器注册表,并标记最新的内部版本号。在发布管道(包含 DEV、TEST 和 PROD)中,我需要将这些图像部署到每个环境的 Web 应用程序中。Azure 版本中有 2 个相关任务可用:“Azure App Service deploy”和“Azure Web App for Containers”。这些都不允许将 Web 应用的图像源设置为 Azure 容器注册表。相反,他们采用自定义注册表/存储库名称并将 Web 应用程序中的图像源设置为私有注册表,然后需要登录名和密码。我还使用 ARM 模板部署所有 Azure 资源,因此我不喜欢在 2 个资源(注册表和 Web 应用程序)已经集成时配置凭据的想法。理想情况下,我将能够将 Web 应用程序设置为使用我在发布中指定的 Azure 容器注册表中的存储库和标记。我什至尝试首先使用特定的存储库和标签手动配置 Web 应用程序,然后尝试在发布时更改 Web 应用程序使用的标签(使用我提到的任务),但它不起作用。标签保持不变。
我考虑的另一个选择是从一开始就将所有 Web 应用程序配置为特定和永久的存储库和标签(例如“dev-latest”)(这不适合 ARM 部署,因为容器需要在 Web 之前存在于注册表中可以配置应用程序,因此我的基础设施自动化是不完整的),在 Web 应用程序中启用“持续部署”,然后在发布中相应地标记最新推送的存储库,以便它们将被 Web 应用程序拾取。我找不到将标签添加到注册表中现有存储库的合理方法。
使用容器化 Web 应用程序进行 CI 的 Azure 最佳实践是什么?人们如何实际构建他们的容器,然后将它们部署到每个环境中?