如何使用 Powershell 将 .Net Web 应用程序部署到 Azure

How to Deploy a .Net web app to Azure using Powershell

我在 Azure 中有一个 "Web app",我 deploy/publish 一个使用 Visual Studio 的 .Net Web 应用程序。 (构建 --> 发布),它起作用了。

我希望能够 deploy/publish 我的应用程序使用 Powershell 脚本。我得到了以下用于构建部分的脚本:

CMD> "c:\Program Files (x86)\MSBuild.0\bin\msbuild.exe" WebApplication1.sln

为了让它也部署,我需要添加一些参数:

CMD> "c:\Program Files (x86)\MSBuild.0\bin\msbuild.exe" WebApplication1.sln /p:DeployOnBuild=true /p:PublishProfile="C:\Users\jgodse\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1\Properties\PublishProfiles\jg-7-web-app-1 - Web Deploy.pubxml" /p:Configuration=Release

我收到一个错误:

Build FAILED.

"c:\Users\jgodse\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1.sln" (default target) (1) ->
"c:\Users\jgodse\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1\WebApplication1.csproj" (default target) (2) ->
(MSDeployPublish target) ->
  C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5): msdeploy error ERROR_USER_UNAUTHORIZED: Web deployment task failed. (Connected to the remote computer ("jg-7-web-app-1.scm.azurewebsites.net") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.) [c:\Users\jgodse\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1\WebApplication1.csproj]

    0 Warning(s)
    1 Error(s)

我显然丢失了我的 Azure 凭据(看来 Visual Studio 能够捕获它们),而且我也不在 Powershell 中 运行。

所以我将整个命令放入一个名为 deploy.bat 的文件中,打开 Powershell window 并执行以下操作:

PS>  Login-AzureRmAccount

(我在 GUI 弹出窗口中输入了 user/password)。

PS> cmd /c .\deploy.bat

构建很好,但我在尝试发布时遇到了同样的错误。我猜想 Azure 凭据在向 CMD 程序进行炮击时没有通过。

如何使用 Powershell 在我的 .Net 项目上调用 MSBuild 以发布到 Azure Web 应用程序?

您可以使用现有的 .pubxml 文件,但需要密码才能进行部署。有几种方法可以得到它。最明显的方法是通过导航到 Web 应用程序的 blade 然后单击 "More",最后单击 "Get publish profile"

从门户获取它

此文件包含各种数据,但您需要的文件名为 userPWD - 这是您需要使用的密码。复制密码并将其添加到您的 MsBuild 命令中:

CMD> "c:\Program Files (x86)\MSBuild.0\bin\msbuild.exe" WebApplication1.sln /p:DeployOnBuild=true /p:PublishProfile="C:\Users\jgodse\Documents\Visual Studio 2015\Projects\WebApplication1\WebApplication1\Properties\PublishProfiles\jg-7-web-app-1 - Web Deploy.pubxml" /p:Configuration=Release /p:Password="Value of userPWD"

显然不建议将此值存储在构建脚本中。您可以做的是使用 Powershell (Get-AzurePublishSettingsFile) 下载发布设置,提取 userPWD 值,将其传递给 MsBuild 以发布您的应用程序,最后清理所有内容。

有多种方法可以实现构建基础架构,我提出的可能不是最适合您的解决方案,但您可以自行试验并确定最适合您的方法。

部分资源:

Automate Everything (Building Real-World Cloud Apps with Azure) - 这个使用 ASM 而不是资源管理器,但您可以轻松调整它以使用 ARM Using Windows PowerShell scripts to publish to dev and test environments

希望对您有所帮助。