由于zip的结构,使用kudu zipdeploy的azure webapp部署失败

mbskvtky  于 2021-06-24  发布在  Kudu
关注(0)|答案(2)|浏览(364)

我正在尝试将.net framework站点的部署过程更新到azure webapp。我们以前用的是 Publish-AzureWebsiteProject powershell cmdlet,但它正在被淘汰。因此,我们正试图通过最近发布的 Publish-AzWebApp powershell cmdlet。把文件放到azure上,一切都很顺利,但是在将zip解压到正确的位置上却失败得很惨。
当我在构建服务器上使用“package”目标构建站点时,它会生成一个用于msdeploy的zip结构。这不是zipdeploy方法所期望的格式。msdeploy zip文件包含部署xml,并且实际内容深入嵌套到表示原始位置的路径中。zipdeploy似乎需要一个简单的网站内容根目录存档,因此它将文件从存档中复制到提取后的文本路径中。
例如,如果我的visualstudio解决方案 d:\builds\solution 然后放入打包的构建文件 d:\builds\solution\project\obj\debug\Package\PackageTemp . 该站点的内容进入以下路径下的zip D_C\builds\solution\project\obj\debug\Package\PackageTemp\Content . 因此,当zipdeploy运行时,它会将内容以 wwwroot/Content/D_C/builds/solution/project/obj/debug/Package/PackageTemp/Content/ .
我正在运行的生成项目的命令是:

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

我希望有人知道我如何通过以下(优惠订单)之一实现这一点:
一个msbuild参数,用于生成网站并创建简单的内容zip
使用msdeploy而不是直接拷贝来部署当前zip的kudu设置
自定义kudu部署脚本,将通过msdeploy而不是文件副本进行部署
将创建兼容zip的msbuild目标自定义项

bhmjp9jg

bhmjp9jg1#

我知道您正在尝试在azure web apps中部署web应用程序。
下面的url将帮助您部署zip
https://docs.microsoft.com/en-us/azure/app-service/deploy-zip
注意:msbuild zip可能无法在所有部署模型中工作
zip config msbuild.exe/p:configuration=“发布”;platform=“任意cpu”;webpublishmethod=包;packagefilename=“\myfolder\package.zip”;desktopbuildpackagelocation=“\myfolder\package.zip”;packageassinglefile=true;packagelocation=“\myfolder\package.zip”;deployonbuild=true;deploytarget=包

vbkedwbf

vbkedwbf2#

我意识到这是一篇老文章,但我在使用powershell zipdeployazure函数时也遇到了这个问题。在我的例子中,现有的azure函数被删除了,但是新的函数没有被创建。我正在使用压缩存档创建部署包。如果我用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\u archive是zip文件的完整路径(不是相对路径)

相关问题