Kudu Azure App Zip 通过 Powershell 部署 - 将文件传输到 wwwroot

Kudu Azure App Zip Deploy via Powershell - Transfer files to wwwroot

我正在使用 powershell 中的 Kudu Azure Zip Deploy API。

如何确保已部署的 zip 文件夹的内容提取到 wwwroot 中,而 wwwroot 是包含文件夹?

当前:

(这里我的zip文件夹是wwwroot里面的容器)

/site/wwwroot/MYZIPFOLDERNAME/CONTENTS

预期:

(我想把zip文件夹里的内容直接加到wwwroot和zip文件夹名之外)

/site/wwwroot/CONTENTS

我已经按照下面的文档进行操作,并且有一个如下的 powershell 脚本:

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

#PowerShell
$username = "<deployment_user>"
$password = "<deployment_password>"
$filePath = "<zip_file_path>"
$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"

Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"

脚本完成后,压缩文件上传到我的站点,但内容打包在文件夹中并嵌套在 wwwroot 目录下。

如果我使用 ZipDeployUI 并拖动文件夹,它将解压缩到 wwwroot/ 目录中,但没有预期的文件夹名称。

按照官方文档Deploy your app to Azure App Service with a ZIP or WAR file to run the PowerShell script in the subsection With PowerShell,没问题,效果很好。

您的问题是由 zip 文件的文件结构引起的。我来告诉你区别。

我的本地目录 D:\projects\xml 中有两个 xml 文件。我使用两种不同的方式将它们打包成一个 zip 文件 xml.zip:使用容器 xml,不使用任何容器,如下图通过 7-zip.

图 1. zip 文件中的容器 xml xml.zip

图1.1。容器 xml 包含两个 xml 个文件

图 2. zip 文件中没有容器 xml.zip

然后我 运行 使用具有不同文件结构的不同 zip 文件的相同 PowerShell 脚本,我在我的 WebApp ZipDeployUI 中得到了不同的结果,如下图。

图 3. 运行 带有容器 xml 的 zip 文件的 PowerShell 脚本,xml 容器被解压到 wwwroot

图3.1。路径 wwwroot/xml

下的容器 xml 中的两个 xml 文件

图4.运行PowerShell脚本压缩包没有容器,两个xml文件直接解压到wwwroot

因此,如果您使用 7-zip 等工具,请将这些文件直接打包为 zip 文件,而不是打包它们的父目录。或者在PowerShell命令行中,请先cd移动到你要打包的这些文件所在的目录,然后运行Compress-Archive -Path * -DestinationPath <file-name>.zip得到一个zip文件,如Create a project Zip file说。

希望对您有所帮助。