2

我正在努力为 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 最佳实践是什么?人们如何实际构建他们的容器,然后将它们部署到每个环境中?

4

1 回答 1

0

只需设置一个 CI 管道来构建映像并将其推送到容器注册表

然后,您可以同时使用 Azure App Service deploy 和 Azure Web App for Containers 任务来处理部署。

Azure WebApp 容器任务与其他内置 Azure 任务类似,需要Azure 服务连接作为输入。Azure 服务连接存储从 Azure Pipelines 或 Azure DevOps Server 连接到 Azure 的凭据。

I'm also deploying all Azure resources using ARM templates so I don't like the idea of configuring credentials when the 2 resources (the Registry and the Web App)

您还可以使用 ARM 和 Azure DevOps 为容器部署 Azure Web App

How do people actually build their containers and then deploy them to each environment?

请查看以下博客和官方文档,这可能会有所帮助:

于 2020-03-16T08:59:35.717 回答