使用 MSDeploy 将 Web 应用程序部署到 Azure 应用服务

Deploying a web application to an Azure App Service using MSDeploy

我在使用 MSDeploy 将 Web 应用程序部署到 Azure 应用服务时遇到了很多问题。我需要使用哪些命令行参数?

MSDeploy 接受参数的方式有点挑剔。首先,该命令需要您的应用服务的用户名和密码。这可以通过在 PowerShell 中使用 Azure CLI 找到,如下所示:

$publishProfile = az webapp deployment list-publishing-profiles --resource-group <ResourceGroupName> --name <WebAppName> --query "[?publishMethod=='MSDeploy']" | ConvertFrom-Json

这会将用户名和密码放入 $publishProfile 变量中,以便稍后与 MSDeploy 一起使用。

接下来,如果源发布网站的路径中有空格并且正在使用 PowerShell,则需要将其转换为等效的短名称语法。如果不这样做,MSDeploy 将抛出如下无意义的异常,诊断起来很痛苦。

Error Code: ERROR_PROVIDER_NOT_FOUND More Information: The provider 'dirPath=' could not be found. Learn more at: https://go.microsoft.com/fwlink/?LinkId=221672#ERROR_PROVIDER_NOT_FOUND. at Microsoft.Web.Deployment.DeploymentProviderSettingCollection..ctor(String factoryName) at Microsoft.Web.Deployment.DeploymentProviderOptions..ctor(String factoryName) at MSDeploy.MSDeploy.GetObjectParameters(Dictionary`2 parameters, Boolean isDestination, DeploymentBaseOptions& retbaseOptions, DeploymentProviderOptions& retproviderOptions) at MSDeploy.MSDeploy.ExecuteWorker() at MSDeploy.MSDeploy.Execute() at MSDeploy.MSDeploy.Main(String[] unusedArgs) Error count: 1.

要将路径转换为其等效的短名称,请使用以下命令:

$shortPath = (New-Object -ComObject Scripting.FileSystemObject).GetFolder(".\Publish").ShortPath

最后,这是 运行 MSDeploy 并将 Web 应用程序部署到 Azure 的命令。为了使用下面的命令,需要定义 $webAppName 变量。

$webAppName = "MyWebApp"
&"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:dirPath="$shortPath",includeAcls=false -dest:dirpath=D:\home\site\wwwroot,ComputerName="https://$webAppName.scm.azurewebsites.net/msdeploy.axd?site=$($webAppName)",UserName=$($publishProfile.userName),Password=$($publishProfile.userPWD),AuthType='Basic' -verbose -debug

该命令应return输出类似于以下内容:

Info: Using ID 'd5e5eb3d-...' for connections to the remote server.
Verbose: Pre-authenticating to remote agent URL 'https://webappname.scm.azurewebsites.net/msdeploy.axd?site=webappname' as '$webappname'.
Verbose: Performing synchronization pass #1.
Verbose: Pre-authenticating to remote agent URL 'https://webappname.scm.azurewebsites.net/msdeploy.axd?site=webappname' as '$webappname'.
Verbose: Received response from agent (HTTP status 'OK').
Info: Adding directory (D:\home\site\wwwroot\cs).
Info: Adding directory (D:\home\site\wwwroot\de).
Info: Adding directory (D:\home\site\wwwroot\es).
Info: Adding directory (D:\home\site\wwwroot\fr).
Info: Deleting file (D:\home\site\wwwroot\hostingstart.html).
Info: Adding directory (D:\home\site\wwwroot\it).
Info: Adding directory (D:\home\site\wwwroot\ja).
Info: Adding directory (D:\home\site\wwwroot\ko).
Info: Adding directory (D:\home\site\wwwroot\pl).
Info: Adding directory (D:\home\site\wwwroot\pt-BR).
Info: Adding directory (D:\home\site\wwwroot\ru).
Info: Adding directory (D:\home\site\wwwroot\runtimes).
Info: Adding directory (D:\home\site\wwwroot\runtimes\unix).
Info: Adding directory (D:\home\site\wwwroot\runtimes\unix\lib).
Info: Adding directory (D:\home\site\wwwroot\runtimes\unix\lib\netcoreapp2.0).
Info: Adding directory (D:\home\site\wwwroot\runtimes\unix\lib\netcoreapp2.1).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win\lib).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win\lib\netcoreapp2.0).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win\lib\netcoreapp2.1).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win\lib\netstandard2.0).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win-arm64).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win-arm64\native).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win-x64).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win-x64\native).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win-x86).
Info: Adding directory (D:\home\site\wwwroot\runtimes\win-x86\native).
Info: Adding directory (D:\home\site\wwwroot\tr).
Info: Adding directory (D:\home\site\wwwroot\zh-Hans).
Info: Adding directory (D:\home\site\wwwroot\zh-Hant).
Verbose: The dependency check 'DependencyCheckInUse' found no issues.
Verbose: The current synchronization pass is missing stream content for 201 objects.
Info: Using ID '1f1ab053-88c6-40a2-90e4-5347157542e6' for connections to the remote server.
Verbose: Performing synchronization pass #2.
Verbose: Pre-authenticating to remote agent URL 'https://webappname.scm.azurewebsites.net/msdeploy.axd?site=webappname' as '$webappname'.
...
Verbose: The HTTP connection (ID='1f1ab053-88c6-40a2-90e4-5347157542e6', type ='GetTraceStatus') is being kept alive while the request is processed.
Verbose: Received response from agent (HTTP status 'OK').
...
Verbose: The dependency check 'DependencyCheckInUse' found no issues.
Verbose: The synchronization completed in 2 pass(es).
Total changes: 231 (230 added, 1 deleted, 0 updated, 0 parameters changed, 44498979 bytes copied)