清除应用服务实例并从 zip 文件上传新内容



在应用服务上,从 zip 文件部署新内容以替换任何现有内容的最佳方法是什么?

请注意:

  • 我在 Linux 上运行
  • 我无法使用 msdeploy
  • 我不能使用 git
  • 我无法使用 VSTS
  • 它需要简单
  • 它不能容易超时
  • 它必须受应用服务的所有订阅级别的支持
  • 命令应仅在各自的操作完成后返回
  • 我有权访问 ARM 模板
  • 只要不是那么困难,我确定我可以将文件上传到存储 blob

有关详细信息,请参阅此处的讨论:https://github.com/projectkudu/kudu/issues/2367

有一个解决方案,包括调用 ARM msdeploy 提供程序来部署云托管的 zip 包。这不需要在客户端上进行 msdeploy,因此涉及 msdeploy 技术这一事实主要是您可以忽略的实现细节。

有几个陷阱,我会在最后指出。

步骤如下:

  • 首先,将您的zip托管在云中。 例如,我这里有一个测试,你可以玩一下:https://davidebbostorage.blob.core.windows.net/arm/FunctionMsDeploy.zip(请注意,这个zip使用特殊的msdeploy打包,但你也可以使用一个普通的旧zip来只包含你的文件)。
  • 然后使用 cli 2.0 运行以下命令,替换资源组、应用名称和 zip 网址:

    az resource update --resource-group MyRG --namespace Microsoft.Web --parent sites/MySite --resource-type Extensions --name MSDeploy --set properties.packageUri=https://davidebbostorage.blob.core.windows.net/arm/FunctionMsDeploy.zip --api-version 2015-08-01
    

这将导致包部署到您的wwwroot,并且任何不在 zip 中的现有内容都将被删除。它很高效,因为它不会触及任何已经存在的文件,并且与zip中的内容相同。因此,它比尝试清理所有内容并解压缩要快得多(但结果是相同的)。

现在有几个陷阱:

  • 由于 CLI 2.0 中似乎存在错误,我无法传递包含等号的 URL,该 URL 排除了 SAS URL。我会向他们报告。现在,使用公共 zip 测试该过程,就像我上面的测试包一样。
  • 命令行比它应该的要复杂得多。我也会向 CLI 团队询问这个问题。

最新更新