尽管重试切换,但 MSDeploy 到 Azure 站点经常失败

MSDeploy to Azure sites frequently fails despite retry switches

我们使用 msdeploy.exe 和预构建包对 Azure 进行了大量部署。间歇性地,但相当频繁地,我们遇到故障(显然是网络问题)。

命令是,

C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe
    -verb:sync -source:package=D:\packages\mysite.zip 
    -dest:auto,ComputerName=https://mysite-staging.scm.azurewebsites.net:443/msdeploy.axd?site=mysite__staging,UserName='$mysite__staging',Password='longpassword',AuthType='Basic'
    -retryAttempts:10
    -retryInterval:3000
    -setParam:name='foo1',value='bar1'
    -enableRule:AppOffline
    -setParam:name='foo2',value='bar2'
    -allowUntrusted=True

它通常工作正常,但有时会失败并显示以下消息:

 Error Code: ERROR_CONNECTION_TERMINATED

-retryAttempts-retryInterval 选项的效果似乎为零。错误发生在我添加它们之前和现在添加它们之后,没有区别。 msdeploy 没有输出表明它正在重试。 我在让 msdpeloy 重试时是否遗漏了什么?

一切,包括机器 运行 msdeploy,都托管在 Azure 的同一区域。没有任何潜在的网络问题,尤其是 30,000 毫秒 - SCM/Kudu 或 msdeploy 在更高层上失败。

对我来说,这个问题有时是因为 Fiddler 而(更常见)是因为 Internet 速度慢。

此外,您可以尝试使用 Kudu 命令,例如 msdeploy 的扩展和 SCM_COMMAND_IDLE_TIMEOUT,您可以设置 => 网络应用程序设置 => 应用程序设置 => 添加具有所需值的设置(以比如说 360(以秒为单位))。 Reference。它说任何外部命令都会在一段时间后被杀死,所以可能是相关的。

我也遇到过这个问题,并在内部向 MS 发了一个问题。

我的一个技巧是在 运行 msdeploy 之前 "warmup" 站点。这可以像在站点 URL 上调用 Web 请求的 powershell 命令一样简单。出于某种原因,这减少了连接终止错误的数量。