代码部署到 Azure 多实例 Web App

Code deployment to Azure multi-instance Web App

基本问题 Azure 如何在 Web 部署期间将 ASP.NET 网站的文件复制到网站的所有实例?

我们能否仅部署带有网站的 zip 包和一个基于 Azure Web 作业(触发的)的 powershell 脚本,它将执行以下操作:

  1. 解压包
  2. 在 Azure 服务器上复制到 /site/wwwroot/

?

如果可能的话,这样我们的优势是:

  1. 我们在部署期间向 Azure 网站发送的字节较少(网站 资源可以很好地压缩)所以部署过程需要 即使是大型网站也需要几秒钟

  2. 真正的部署工作是由触发的网络作业完成的,这使得 部署过程异步。我们可以 运行 同一个部署 构建机器然后只监控进程

我们已经成功应用这种方法来部署 Azure Web 作业。我们有 10 个具有几乎相同依赖关系的 Web 作业,并且部署相同的东西 10 次(50MB * 10)需要太多时间。但在这种情况下,托管此 Web 作业的 Azure Web App 是一个实例。

那么多实例网络应用的情况会有所不同吗?

应用服务正在使用网络共享来映射源文件夹。因此,内容的更改会应用于所有实例。 使用 LocalCache 时存在例外情况 - 在这种情况下,需要显式重新启动 Web 应用程序才能使更改生效

how does Azure copies ASP.NET web site's files to all instances of the site during web deploy?

Azure Web 应用程序内容存储在 Azure 存储中,并以内容共享的形式持久显示。对于每个实例,沙箱在内核模式下实现动态符号 link,将 d:\home 映射到 Web 应用程序内容主目录。无论 Web 应用程序部署在多少个实例上,每个实例都可以使用 'd:\home' 访问其主目录。因此,默认情况下,Azure Web App 不会将网站的文件复制到每个 VM 实例。

您还可以通过在应用服务的应用设置中将 'WEBSITE_LOCAL_CACHE_OPTION' 属性 设置为 'Always' 来启用本地缓存。之后,Azure Web App 将在 Web 应用程序启动时将共享内容的 /site 和 /siteextensions 文件夹复制到每个本地 VM 实例。 'd:\home' 路径将指向本地缓存。如果您的 Web 应用程序重新启动,Azure Web 应用程序会将共享内容重新复制到每个本地 VM 实例。

So will situation be different for multi-instanced web app?

如果你没有开启本地缓存,多实例网络应用的情况也是一样的。如果您确实打开了本地缓存,则需要在部署任何内容后重新启动您的 Web 应用程序以将更改应用到每个实例。