将文件部署到应用服务

注意

从 2024 年 6 月 1 日开始,所有新创建的应用服务应用都可以选择生成唯一的默认主机名,命名约定为 <app-name>-<random-hash>.<region>.chinacloudsites.cn。 现有应用名称将保持不变。

示例: myapp-ds27dh7271aah175.westus-01.chinacloudsites.cn

本文介绍如何将代码作为 ZIP、WAR、JAR 或 EAR 包部署到 Azure 应用服务。 此外,还介绍如何将各个文件独立于应用程序包部署到应用服务。

先决条件

若要完成本文中的步骤,请创建一个应用服务应用,或者使用为其他教程创建的应用。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

创建一个项目 ZIP 包

重要

为部署创建 ZIP 包时,不要包含根目录,应只包含其中的文件和目录。 如果将 GitHub 存储库下载为 ZIP 文件,无法将该文件按原样部署到应用服务。 GitHub 可在顶层添加额外的嵌套目录,但这不适用于应用服务。

在本地终端窗口中,导航到应用项目的根目录。

此目录应包含 Web 应用的入口文件,例如 index.htmlindex.phpapp.js。 它还可能包含包管理文件,如 project.jsoncomposer.jsonpackage.jsonbower.jsonrequirements.txt

除非你希望应用服务为你运行部署自动化,否则请运行所有生成任务(例如,npmbowergulpcomposerpip),并确保你拥有运行应用所需的所有文件。 如果想要直接运行包,则此步骤是必需的。

创建一个包含项目所有内容的 zip 文件。 对于 dotnet 项目,这是 dotnet publish 命令的输出目录中的所有内容(不包含输出目录本身)。 例如,在终端中使用以下命令创建包含当前目录内容的 ZIP 包:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

部署 ZIP 包

部署 ZIP 包时,应用服务会将其内容解压缩到应用的默认路径(在 Windows 中为 D:\home\site\wwwroot,在 Linux 中为 /home/site/wwwroot)。

此 ZIP 包部署使用为基于持续集成的部署提供支持的同一 Kudu 服务。 Kudu 支持使用以下功能进行 ZIP 包部署:

  • 删除先前的部署留下的文件。
  • 启用默认生成过程的选项,包括包还原。
  • 部署自定义,包括运行部署脚本。
  • 部署日志。
  • 包大小上限为 2048 MB。

注意

仅当 ZIP 包中文件的时间戳与已部署的文件不匹配时,才会复制该包中的文件。

在 Kudu 中使用 zip 部署 UI

在浏览器中,导航至 https://<app_name>.scm.chinacloudsites.cn/ZipDeployUI(请参阅顶部的注释)。

通过将文件拖动到网页中的文件资源管理器区域,上传你在创建项目 ZIP 包中创建的 ZIP 包。

部署正在进行的时候,右上角的图标会以百分比形式显示进度。 该页还在资源管理器区域下方显示操作的详细消息。 部署完成后,最后一条消息应显示 Deployment successful

上面的终结点目前不适用于 Linux 应用服务。 请考虑改用 FTP 或 ZIP 部署 API

不在 Kudu 中使用 zip 部署 UI

使用 az webapp deploy 命令将 ZIP 包部署到 Web 应用。 该 CLI 命令使用 Kudu 发布 API 部署文件,并且完全可自定义。

以下示例将 ZIP 包推送到站点。 为 --src-path 指定本地 ZIP 包的路径。

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>

部署 ZIP 包后,此命令将重启应用。

为 zip 部署启用生成自动化

默认情况下,部署引擎假设 ZIP 包已准备好按原样运行,并且不运行任何生成自动化。 若要启用与 Git 部署中相同的生成自动化,请通过在 Azure CLI 中运行以下命令来设置 SCM_DO_BUILD_DURING_DEPLOYMENT 应用设置:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

有关详细信息,请参阅 Kudu 文档

部署 WAR/JAR/EAR 包

可将 WAR、JAR 或 EAR 包部署到应用服务,以使用 Azure CLI、PowerShell 或 Kudu 发布 API 运行 Java Web 应用。

此处显示的部署过程使用正确的命名约定和目录结构将包放置在应用的内容共享上(请参阅 Kudu 发布 API 参考),这是建议的方法。 如果改为使用 FTP 或 WebDeploy 部署 WAR/JAR/EAR 包,则可能会看到由于命名或结构错误而导致的未知故障。

使用 az webapp deploy 命令将 WAR 包部署到 Tomcat 或 JBoss EAP。 为 --src-path 指定本地 Java 包的路径。

az webapp deploy --resource-group <group-name> --name <app-name> --src-path ./<package-name>.war

该 CLI 命令使用 Kudu 发布 API 来部署包,并且完全可自定义。

部署单个文件

az webapp deploy 命令与 --type 参数配合使用,将启动脚本、库和静态文件部署到 Web 应用。

如果以这种方式部署启动脚本,应用服务会自动使用你的脚本来启动应用。

该 CLI 命令使用 Kudu 发布 API 部署文件,并且完全可自定义。

部署启动脚本

az webapp deploy --resource-group <group-name> --name <app-name> --src-path scripts/startup.sh --type=startup

部署库文件

az webapp deploy --resource-group <group-name> --name <app-name> --src-path driver.jar --type=lib

部署静态文件

az webapp deploy --resource-group <group-name> --name <app-name> --src-path config.json --type=static

部署到受网络保护的应用

根据 Web 应用的网络配置,可能会阻止从开发环境直接访问应用(请参阅“部署到网络保护的站点”和“部署到网络保护的站点,第 2 部分)。 可以将软件包或文件发布到 Web 应用可访问的存储系统,并触发应用程以从存储位置提取 ZIP,而不是直接将软件包或文件推送到网络应用程序。

远程 URL 可以是任何可公开访问的位置,但最好使用具有 SAS 密钥的 Blob 存储容器来保护它。

像在其他部分中一样使用 az webapp deploy 命令,但使用 --src-url 而不是 --src-path。 以下示例会使用 --src-url 参数指定 Azure 存储帐户中托管的 ZIP 文件的 URL。

az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.chinacloudapi.cn/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3 --type zip

Kudu 发布 API 参考

publish Kudu API 允许指定 CLI 命令中所用的相同参数作为 URL 查询参数。 若要使用 Kudu REST API 进行身份验证,最好使用令牌身份验证,但也可以使用应用的部署凭据的基本身份验证。

下表显示了可用的查询参数及其允许的值和说明。

密钥 允许的值 说明 必需 类型
type war|jar|ear|lib|startup|static|zip 所部署的项目的类型,此参数设置默认目标路径,并告知 Web 应用应如何处理部署。
- type=zip:通过将内容解压缩到 /home/site/wwwroot 来部署 ZIP 包。 target-path 参数是可选的。
- type=war:部署 WAR 包。 默认情况下,WAR 包将部署到 /home/site/wwwroot/app.war。 可以使用 target-path 指定目标路径。
- type=jar:将 JAR 包部署到 /home/site/wwwroot/app.jar。 将忽略 target-path 参数
- type=ear:将 EAR 包部署到 /home/site/wwwroot/app.ear。 将忽略 target-path 参数
- type=lib:部署 JAR 库文件。 默认情况下,该文件将部署到 /home/site/libs。 可以使用 target-path 指定目标路径。
- type=static:部署静态文件(如脚本)。 默认情况下,该文件将部署到 /home/site/wwwroot
- type=startup:部署由应用服务自动用作应用启动脚本的脚本。 默认情况下,该脚本将部署到 D:\home\site\scripts\<name-of-source>(在 Windows 中)或 home/site/wwwroot/startup.sh(在 Linux 中)。 可以使用 target-path 指定目标路径。
字符串
restart true|false 默认情况下,在完成部署操作后,API 将重启应用 (restart=true)。 若要部署多个项目,请设置 restart=false,防止在除最后一个部署外的其他所有部署上重启。 布尔
clean true|false 指定在目标部署中部署项目之前是否清理(删除)目标部署。 布尔
ignorestack true|false 发布 API 使用 WEBSITE_STACK 环境变量根据站点的语言堆栈选择安全默认值。 将此参数设置为 false 会禁用任何特定于语言的默认值。 布尔
target-path 绝对路径 要将项目部署到的绝对路径。 例如:"/home/site/deployments/tools/driver.jar""/home/site/scripts/helper.sh" String

后续步骤

有关更高级的部署方案,请参阅使用 Git 部署到 Azure。 通过基于 Git 的 Azure 部署可实现版本控制、包还原、MSBuild 等功能。

更多资源