本文介绍如何将代码作为 ZIP、WAR、JAR 或 EAR 包部署到
Azure 应用服务
。 此外,还介绍如何将各个文件独立于应用程序包部署到应用服务。
若要完成本文中的步骤,请
创建一个应用服务应用
,或者使用为其他教程创建的应用。
如果没有
Azure 订阅
,请在开始之前创建一个
Azure 免费帐户
。
创建一个项目 ZIP 包
如果以 ZIP 包的形式下载文件,请首先提取该文件。 例如,如果从 GitHub 下载了 ZIP 包,则无法按原样部署该文件。 GitHub 可添加额外的嵌套目录,但这不适用于应用服务。
在本地终端窗口中,导航到应用项目的根目录。
此目录应包含 Web 应用的入口文件,例如
index.html
、
index.php
和
app.js
。 它还可能包含包管理文件,如
project.json
、
composer.json
、
package.json
、
bower.json
和
requirements.txt
。
除非你希望应用服务为你运行部署自动化,否则请运行所有生成任务(例如,
npm
、
bower
、
gulp
、
composer
和
pip
),并确保你拥有运行应用所需的所有文件。 如果想要
直接运行包
,则此步骤是必需的。
创建一个包含项目所有内容的 zip 文件。 对于
dotnet
项目,此文件夹是
dotnet publish
命令的输出文件夹。 以下命令使用您终端中的默认工具执行操作:
# 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。
有关详细信息,请参阅 Kudu 文档。
仅当 ZIP 包中文件的时间戳与已部署的文件不匹配时,才会复制该包中的文件。 使用缓存输出的生成过程生成 zip 可以使部署速度更快。 有关详细信息,请参阅从 zip 文件或 url 部署。
使用 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 包后,此命令将重启应用。
根据你的 web 应用的网络配置,从本地环境对站点的直接访问可能会被阻止。 要在这种情况下部署代码,可以将 ZIP 发布到可从 web 应用访问的存储系统,并触发应用以从存储位置拉取 ZIP,而不是将 ZIP 推送到 web 应用 。 有关部署到网络安全的 web 应用的详细信息,请参阅此文。
以下示例使用 --src-url
参数指定站点应从中拉取 ZIP 的 Azure 存储帐户的 URL。
az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3
以下示例使用 cURL 工具部署 ZIP 包。 替换占位符 <username>
、<zip-package-path>
和 <app-name>
。 出现 cURL 的提示时,请键入部署密码。
curl -X POST -u <username:password> -T "@<zip-package-path>" https://<app-name>.scm.azurewebsites.net/api/publish?type=zip
根据你的 web 应用的网络配置,从本地环境对站点的直接访问可能会被阻止。 要在这种情况下部署代码,可以将 ZIP 发布到可从 web 应用访问的存储系统,并触发应用以从存储位置拉取 ZIP,而不是将 ZIP 推送到 web 应用 。 有关部署到网络安全的 web 应用的详细信息,请参阅此文。
以下示例使用 packageUri
参数指定 Web 应用应从中拉取 ZIP 的 Azure 存储帐户的 URL。
curl -X POST -u <username:password> https://<app-name>.scm.azurewebsites.net/api/publish -d '{"packageUri": "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3"}'
在浏览器中,导航到 https://<app_name>.scm.azurewebsites.net/ZipDeployUI
。
通过将文件拖动到网页中的文件资源管理器区域,上传你在创建项目 ZIP 包中创建的 ZIP 包。
部署正在进行的时候,右上角的图标会以百分比形式显示进度。 该页还在资源管理器区域下方显示操作的详细消息。 完成后,最后一个部署消息会显示:Deployment successful
。
上面的终结点目前不适用于 Linux 应用服务。 请考虑改用 FTP 或 ZIP 部署 API。
为 ZIP 部署启用生成自动化
默认情况下,部署引擎假设 ZIP 包已准备好按原样运行,并且不运行任何生成自动化。 若要启用与 Git 部署中相同的生成自动化,请通过在 Cloud Shell 中运行以下命令来设置 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 文档。
部署期间我的应用会发生什么情况?
所有官方支持的部署方法均会更改应用的 /home/site/wwwroot 文件夹中的文件。 这些文件用于运行你的应用。 因此,部署可能会因为锁定的文件而失败。 应用可能会在部署期间发生不可预测的行为,因为这些文件并非同时更新。 这种行为对于面向客户的应用来说是需要避免的。 可以通过几种方法避免这些问题:
直接从 ZIP 包运行应用,而无需将其解压。
部署期间停止应用或为其启用脱机模式。 有关详细信息,请参阅处理部署过程中锁定的文件。
部署到过渡槽且开启了自动交换。
部署 WAR/JAR/EAR 包
可将 WAR、JAR 或 EAR 包部署到应用服务,以使用 Azure CLI、PowerShell 或 Kudu 发布 API 运行 Java Web 应用。
部署过程会正确地将包放置在共享文件驱动器上(请参阅 Kudu 发布 API 参考)。 因此,不建议使用 FTP 或 WebDeploy 部署 WAR/JAR/EAR 包。
Azure CLI
Azure PowerShell
Kudu API
Kudu UI
使用 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
根据你的 web 应用的网络配置,从本地环境对站点的直接访问可能会被阻止。 要在这种情况下部署代码,可以将 ZIP 发布到可从 web 应用访问的存储系统,并触发应用以从存储位置拉取 ZIP,而不是将 ZIP 推送到 web 应用 。 有关部署到网络安全的 web 应用的详细信息,请参阅此文。
以下示例使用 --src-url
参数指定 Web 应用应从中拉取 WAR 的 Azure 存储帐户的 URL。
az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.war?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3 --type war
该 CLI 命令使用 Kudu 发布 API 来部署包,并且完全可自定义。
以下示例使用 Publish-AzWebapp 上传 .war 文件。 请替换占位符 <group-name>
、<app-name>
和 <package-path>
(Azure PowerShell 仅支持 WAR 和 JAR 文件)。
Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <package-path>
以下示例使用 cURL 工具部署 .war、.jar 或 .ear 文件。 请替换占位符 <username>
、<file-path>
、<app-name>
和 <package-type>
(相应地替换为 war
、jar
或 ear
)。 出现 cURL 的提示时,请键入部署密码。
curl -X POST -u <username> -T @"<file-path>" https://<app-name>.scm.azurewebsites.net/api/publish?type=<package-type>
根据你的 web 应用的网络配置,从本地环境对站点的直接访问可能会被阻止。 要在这种情况下部署代码,可以将 ZIP 发布到可从 web 应用访问的存储系统,并触发应用以从存储位置拉取 ZIP,而不是将 ZIP 推送到 web 应用 。 有关部署到网络安全的 web 应用的详细信息,请参阅此文。
以下示例使用 packageUri
参数指定 Web 应用应从中拉取 WAR 的 Azure 存储帐户的 URL。 除 WAR 外,该文件也可以是 JAR 或 EAR 文件。
curl -X POST -u <username> https://<app-name>.scm.azurewebsites.net/api/publish -d '{"packageUri": "https://storagesample.blob.core.windows.net/sample-container/myapp.war?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3"}'
有关详细信息,请参阅 Kudu 发布 API 参考
Kudu UI 不支持部署 JAR、WAR 或 EAR 应用程序。 请使用其他某个选项。
部署单个文件
Azure CLI
Azure PowerShell
Kudu API
Kudu UI
将 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
部署启动脚本
以下示例使用 cURL 工具为应用程序部署启动文件。请替换占位符 <username>
、<startup-file-path>
和 <app-name>
。 出现 cURL 的提示时,请键入部署密码。
curl -X POST -u <username> -T @"<startup-file-path>" https://<app-name>.scm.azurewebsites.net/api/publish?type=startup
部署库文件
以下示例使用 cURL 工具为应用程序部署库文件。 替换占位符 <username>
、<lib-file-path>
和 <app-name>
。 出现 cURL 的提示时,请键入部署密码。
curl -X POST -u <username> -T @"<lib-file-path>" "https://<app-name>.scm.azurewebsites.net/api/publish?type=lib&path=/home/site/deployments/tools/my-lib.jar"
部署静态文件
以下示例使用 cURL 工具为应用程序部署配置文件。 替换占位符 <username>
、<config-file-path>
和 <app-name>
。 出现 cURL 的提示时,请键入部署密码。
curl -X POST -u <username> -T @"<config-file-path>" "https://<app-name>.scm.azurewebsites.net/api/publish?type=static&path=/home/site/deployments/tools/my-config.json"
Kudu 发布 API 参考
publish
Kudu API 允许指定 CLI 命令中所用的相同参数作为 URL 查询参数。 若要使用 Kudu API 进行身份验证,可以将应用的部署凭据与基本身份验证配合使用。
下表显示了可用的查询参数及其允许的值和说明。
war
|jar
|ear
|lib
|startup
|static
|zip
所部署的项目的类型,此参数设置默认目标路径,并告知 Web 应用应如何处理部署。
- type=zip
:通过将内容解压缩到 /home/site/wwwroot
来部署 ZIP 包。 path
参数是可选的。
- type=war
:部署 WAR 包。 默认情况下,WAR 包将部署到 /home/site/wwwroot/app.war
。 可以使用 path
指定目标路径。
- type=jar
:将 JAR 包部署到 /home/site/wwwroot/app.jar
。 将忽略 path
参数
- type=ear
:将 EAR 包部署到 /home/site/wwwroot/app.ear
。 将忽略 path
参数
- type=lib
:部署 JAR 库文件。 默认情况下,该文件将部署到 /home/site/libs
。 可以使用 path
指定目标路径。
- type=static
:部署静态文件(例如脚本)。 默认情况下,该文件将部署到 /home/site/wwwroot
。
- type=startup
:部署由应用服务自动用作应用启动脚本的脚本。 默认情况下,该脚本将部署到 D:\home\site\scripts\<name-of-source>
(在 Windows 中)或 home/site/wwwroot/startup.sh
(在 Linux 中)。 可以使用 path
指定目标路径。
restart
true
|false
默认情况下,在完成部署操作后,API 将重启应用 (restart=true
)。 若要部署多个项目,请设置 restart=false
,防止在除最后一个部署外的其他所有部署上重启。
clean
true
|false
指定在目标部署中部署项目之前是否清理(删除)目标部署。
ignorestack
true
|false
发布 API 使用 WEBSITE_STACK
环境变量根据站点的语言堆栈选择安全默认值。 将此参数设置为 false
会禁用任何特定于语言的默认值。
"<absolute-path>"
要将项目部署到的绝对路径。 例如:"/home/site/deployments/tools/driver.jar"
、"/home/site/scripts/helper.sh"
。
String
有关更高级的部署方案,请参阅使用 Git 部署到 Azure。 通过基于 Git 的 Azure 部署可实现版本控制、包还原、MSBuild 等功能。
Kudu:从 zip 文件部署
环境变量和应用设置参考