我正在尝试将.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
我希望有人知道如何通过以下一种方式(优先顺序)实现这一目标:
答案 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