我正在尝试将 .NET Framework 站点的部署过程更新为 Azure WebApp。我们之前使用的是 Publish-AzureWebsiteProject
PowerShell cmdlet,但它已被逐步淘汰。因此,我们尝试通过最近发布的 Publish-AzWebApp
PowerShell cmdlet 使用 kudu 的 zipdeploy 功能。就将文件传输到 Azure 而言,一切都很顺利,但无法将 ZIP 解压到正确的位置。
当我在构建服务器上使用“Package”目标构建站点时,它会生成一个用于 MSDeploy 的 ZIP 结构。这不是 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/
的 Web 应用程序中。
我运行来构建项目的命令是:
msbuild.exe /nologo /v:minimal /T:Package /p:Configuration="Debug;VisualStudioVersion=12.0" project.csproj
我希望有人知道如何通过以下方法之一实现此目的(优先顺序):
- 用于构建网站并创建简单内容 ZIP 的 msbuild 参数
- kudu 设置,将使用 msdeploy 而不是直接复制来部署当前 ZIP
- 自定义 kudu 部署脚本,将通过 msdeploy 而不是文件复制进行部署
- 将创建兼容 ZIP 的 msbuild 目标自定义
最佳答案
我意识到这是一篇旧帖子,但我在使用 Powershell 压缩部署 Azure Functions 时也遇到了这个问题。 就我而言,现有的 Azure Functions 已被删除,但新的 Azure Functions 并未创建。 我使用 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 文件的完整路径(不是相对路径)
关于.net - 由于 ZIP 结构,使用 kudu ZipDeploy 的 Azure Web 应用程序部署失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803209/