由于ZIP的结构,使用kudu ZipDeploy的Azure Webapp部署失败

时间:2019-04-23 01:46:10

标签: .net azure deployment msbuild kudu

我正在尝试将.NET Framework网站的部署过程更新为Azure WebApp。我们之前使用的是Publish-AzureWebsiteProject PowerShell cmdlet,但目前已逐步淘汰。因此,我们正在尝试通过最近发布的Publish-AzWebApp PowerShell cmdlet使用kudu的zipdeploy功能。就将文件发送到Azure而言,一切工作都很好,但是无法将ZIP压缩到正确的位置却很可怕。

当我在构建服务器上使用“打包”目标构建站点时,它会生成一个结构化的ZIP以便与MSDeploy一起使用。这不是zipdeploy方法所需的格式。 MSDeploy ZIP文件包括部署XML,并且实际内容深深嵌套在表示原始位置的路径中。 Zipdeploy似乎想要一个网站内容根的简单存档,因此它将提取后的文件从存档复制到文字路径中。

例如,如果我的Visual Studio解决方案在d:\builds\solution中,则用于打包的构建文件将放在d:\builds\solution\project\obj\debug\Package\PackageTemp中。该网站的内容在以下路径D_C\builds\solution\project\obj\debug\Package\PackageTemp\Content下进入ZIP。结果,当zipdeploy运行时,它将内容放入wwwroot/Content/D_C/builds/solution/project/obj/debug/Package/PackageTemp/Content/的webapp中。

我正在运行的用于构建项目的命令是:

msbuild.exe /nologo /v:minimal /T:Package /p:Configuration="Debug;VisualStudioVersion=12.0" project.csproj

我希望有人知道如何通过以下一种方式(优先顺序)实现这一目标:

  • 用于构建网站并创建简单内容ZIP的msbuild参数
  • 一个Kudu设置,它将使用msdeploy而不是直接复制来部署当前的ZIP
  • 一个自定义kudu部署脚本,它将通过msdeploy而不是文件复制进行部署
  • 将创建兼容ZIP的msbuild目标自定义

2 个答案:

答案 0 :(得分:1)

我意识到这是一篇过时的文章,但是使用Powershell压缩Azure功能时也遇到了这个问题。 就我而言,现有的Azure功能已删除,但未创建新的功能。 我正在使用Compress-Archive创建部署程序包。如果我使用7Zip创建了程序包,则可以正常工作。 那是在Powershell v5.1.18362.752

在Powershell 7.0.3上运行相同的代码效果很好。我还没有尝试过PowerSHell 6。 这是代码段:

$files = Get-ChildItem -Path $path -Exclude $exclude
# check the powershell version because v5.1 has a Compress-Archive that won't deploy to Azure
if($PSVersionTable.PSVersion.Major -lt 7){
    Write-Host -ForegroundColor Red "Incompatible PowerShell version."
    return
}
# compress
Compress-Archive -Path $files -DestinationPath $publish_archive -CompressionLevel Optimal

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", ("Basic {0}" -f $base64AuthInfo))
$headers.Add("Content-Type", "application/zip")

$ret = Invoke-RestMethod -Method Post -Headers $headers -Uri $url -InFile $publish_archive

$ publish_archive是zip文件的完整路径(不是相对路径)

答案 1 :(得分:-1)

我了解您正在尝试使用CI CD管道在Azure Web应用程序中部署Web应用程序。

下面的URL将帮助您部署Zip

https://docs.microsoft.com/en-us/azure/app-service/deploy-zip

注意:MSBUILD Zip可能不适用于所有部署模型

邮编配置 MSBuild.exe / p:配置=“发布”;平台=“任何cpu”; WebPublishMethod = Package; PackageFileName =“ \ MyFolder \ package.zip”; DesktopBuildPackageLocation =“ \ MyFolder \ package.zip”; PackageAsSingleFile = true; PackageLocation =“ \ MyFolder \ package.zip”; DeployOnBuild = true; DeployTarget = Package