在应用服务上,从 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 团队询问这个问题。