AzureWebApp@1 - Azure Web 应用 v1 任务
此任务部署适用于 Linux 或 Windows 的 Azure Web 应用。
语法
# Azure Web App v1
# Deploy an Azure Web App for Linux or Windows.
- task: AzureWebApp@1
inputs:
azureSubscription: # string. Required. Azure subscription.
appType: # 'webApp' | 'webAppLinux'. Required. App type.
appName: # string. Required. App name.
#deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
#resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group.
#slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
#customDeployFolder: # string. Optional. Use when package EndsWith .war. Custom Deploy Folder.
#runtimeStack: # 'DOTNETCORE:9.0' | 'DOTNETCORE:8.0' | 'DOTNETCORE:7.0' | 'DOTNETCORE:6.0' | 'NODE:20-lts' | 'NODE:18-lts' | 'NODE:16-lts' | 'PYTHON:3.12' | 'PYTHON:3.11' | 'PYTHON:3.10' | 'PYTHON:3.9' | 'PYTHON:3.8' | 'PHP:8.3' | 'PHP:8.2' | 'PHP:8.1' | 'PHP:8.0' | 'JAVA:21-java21' | 'JAVA:17-java17' | 'JAVA:11-java11' | 'JAVA:8-jre8' | 'JBOSSEAP:8-java17' | 'JBOSSEAP:8-java11' | 'JBOSSEAP:7-java17' | 'JBOSSEAP:7-java11' | 'JBOSSEAP:7-java8' | 'TOMCAT:10.1-java21' | 'TOMCAT:10.1-java17' | 'TOMCAT:10.1-java11' | 'TOMCAT:10.0-java17' | 'TOMCAT:10.0-java11' | 'TOMCAT:10.0-jre8' | 'TOMCAT:9.0-java21' | 'TOMCAT:9.0-java17' | 'TOMCAT:9.0-java11' | 'TOMCAT:9.0-jre8' | 'TOMCAT:8.5-java11' | 'TOMCAT:8.5-jre8'. Optional. Use when appType = webAppLinux. Runtime stack.
#startUpCommand: # string. Optional. Use when appType = webAppLinux. Startup command.
# Application and Configuration Settings
#customWebConfig: # string. Optional. Use when appType != webAppLinux && package NotEndsWith .war. Generate web.config parameters for Python, Node.js, Go and Java apps.
#appSettings: # string. App settings.
#configurationStrings: # string. Configuration settings.
# Additional Deployment Options
#deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Web App v1
# Deploy an Azure Web App for Linux or Windows.
- task: AzureWebApp@1
inputs:
azureSubscription: # string. Required. Azure subscription.
appType: # 'webApp' | 'webAppLinux'. Required. App type.
appName: # string. Required. App name.
#deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
#resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group.
#slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
#customDeployFolder: # string. Optional. Use when package EndsWith .war. Custom Deploy Folder.
#runtimeStack: # string. Optional. Use when appType = webAppLinux. Runtime stack.
#startUpCommand: # string. Optional. Use when appType = webAppLinux. Startup command.
# Application and Configuration Settings
#customWebConfig: # string. Optional. Use when appType != webAppLinux && package NotEndsWith .war. Generate web.config parameters for Python, Node.js, Go and Java apps.
#appSettings: # string. App settings.
#configurationStrings: # string. Configuration settings.
# Additional Deployment Options
#deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar. Deployment method. Default: auto.
输入
appType
-
应用类型
string
。 必填。 允许的值:webApp
(Windows 上的 Web 应用)、webAppLinux
(Linux 上的 Web 应用)。
指定 Azure Web 应用类型。
appName
-
应用名称
string
。 必填。
指定现有 Azure 应用服务的名称。 仅列出基于所选应用类型的应用服务。
deployToSlotOrASE
-
部署到槽或应用服务环境
boolean
。 可选。 当 appType != ""
时使用。 默认值:false
。
选择部署到现有部署槽位或 Azure 应用服务环境的选项。
对于这两个目标,任务都需要一个资源组名称。
如果部署目标为槽,则默认值为生产槽。 还可以提供任何其他现有槽名称。
如果部署目标为 Azure 应用服务环境,请将槽名称保留为“生产”,并指定资源组名称。
resourceGroupName
-
资源组
string
。
deployToSlotOrASE = true
时是必需的。
当部署目标为部署槽位或 Azure 应用服务环境时,需要资源组名称。
指定包含上面指示的 Azure 应用服务的 Azure 资源组。
slotName
-
槽
string
。
deployToSlotOrASE = true
时是必需的。 默认值:production
。
指定现有槽,不包括生产槽。
package
-
包或文件夹
string
。 必填。 默认值:$(System.DefaultWorkingDirectory)/**/*.zip
。
包或文件夹的文件路径,其中包含 MSBuild 生成的应用服务内容、压缩的 zip 文件或 war 文件。 支持变量(生成 | 版本)和通配符。 例如,$(System.DefaultWorkingDirectory)/**/*.zip
或 $(System.DefaultWorkingDirectory)/**/*.war
。
customDeployFolder
-
自定义部署文件夹
string
。 可选。 当 package EndsWith .war
时使用。
指定要部署到的自定义文件夹名称。
如果该字段为空,则包将部署到 <appname>.azurewebsites.net/<warpackagename>
。
如果输入了 ROOT,则包将部署到 <appname>.azurewebsited.net
。
在所有其他实例中,它将部署到 <appname>.azurewebsited.net/<customWarName>
。
runtimeStack
-
运行时堆栈
string
。 可选。 当 appType = webAppLinux
时使用。 允许的值:DOTNETCORE:9.0
(.NET 9.0)、DOTNETCORE:8.0
(.NET 8.0)、DOTNETCORE:7.0
(.NET 7.0)、DOTNETCORE:6.0
(.NET 6.0)、NODE:20-lts
(节点 20 LTS)、NODE:18-lts
(节点 18 LTS)、NODE:16-lts
(节点 16 LTS)、PYTHON:3.12
(Python 3.12),NODE:16-lts
(节点 16 LTS)、PYTHON:3.12
(Python 3.12),PYTHON:3.11
(Python 3.11)、PYTHON:3.10
(Python 3.10)、PYTHON:3.9
(Python 3.9)、PYTHON:3.8
(Python 3.8)、PHP:8.3
(PHP 8.3)、PHP:8.2
(PHP 8.2)、PHP:8.1
(PHP 8.1)、PHP:8.0
(PHP 8.0)、JAVA:21-java21
(Java 21), JAVA:17-java17
(Java 17), JAVA:11-java11
(Java 11), JAVA:8-jre8
(Java 8), JBOSSEAP:8-java17
(JBoss EAP 8 (Java 17)), JBOSSEAP:8-java11
(JBoss EAP 8 (Java 11)), JBOSSEAP:7-java17
(JBoss EAP 7 (Java 17)), JBOSSEAP:7-java11
(JBoss EAP 7 (Java 11) ))、JBOSSEAP:7-java8
(JBoss EAP 7 (Java 8))、TOMCAT:10.1-java21
(Tomcat 10.1 (Java 21))、TOMCAT:10.1-java17
(Tomcat 10.1 (Java 17))、TOMCAT:10.1-java11
(Tomcat 10.1 (Java 11))、TOMCAT:10.0-java17
(Tomcat 10.0 (Java 17)) ) TOMCAT:10.0-java11
(Tomcat 10.0 (Java 11))、TOMCAT:10.0-jre8
(Tomcat 10.0 (Java 8))、TOMCAT:9.0-java21
(Tomcat 9.0 (Java 21))、TOMCAT:9.0-java17
(Tomcat 9.0 (Java 17) )、TOMCAT:9.0-java11
(Tomcat 9.0 (Java 11))、TOMCAT:9.0-jre8
(Tomcat 9.0 (Java 8))、TOMCAT:8.5-java11
(Tomcat 8.5 (Java 11))、TOMCAT:8.5-jre8
(Tomcat 8.5 (Java 8) )。
Linux 上的 Web 应用提供了两种不同的选项来发布应用程序:自定义映像部署(用于容器的 Web 应用)和具有内置平台映像的应用部署(Linux 上的 Web 应用)。 仅当 Linux Web 应用 被选为任务中的应用类型时,此参数才可用。
runtimeStack
-
运行时堆栈
string
。 可选。 当 appType = webAppLinux
时使用。
Linux 上的 Web 应用提供了两种不同的选项来发布应用程序:自定义映像部署(用于容器的 Web 应用)和具有内置平台映像的应用部署(Linux 上的 Web 应用)。 仅当 Linux Web 应用 被选为任务中的应用类型时,此参数才可用。
startUpCommand
-
Startup 命令
string
。 可选。 当 appType = webAppLinux
时使用。
指定启动命令。
例如:
dotnet run
dotnet filename.dll.
customWebConfig
-
为 Python、Node.js、Go 和 Java 应用生成 web.config 参数
string
。 可选。 当 appType != webAppLinux && package NotEndsWith .war
时使用。
如果应用程序没有标准 web.config,将生成并部署到 Azure 应用服务。 web.config 中的值因应用程序框架而异,并且可以对其进行编辑。 例如,对于 node.js 应用程序,web.config 将具有启动文件和iis_node模块值。 此编辑功能仅适用于生成的 web.config
appSettings
-
应用设置
string
。
使用语法 -key value
指定 Web 应用应用程序设置(例如:-Port 5000
-RequestTimeout 5000
-WEBSITE_TIME_ZONE
)。 将包含空格的值括在双引号中(例如:"Eastern Standard Time"
)。
configurationStrings
-
配置设置
string
。
使用语法 -key value
指定 Web 应用配置设置(例如:-phpVersion 5.6
-linuxFxVersion: node|6.11
)。 将包含空格的值括在双引号中。
deploymentMethod
-
部署方法
string
。
appType != webAppLinux && appType != "" && package NotEndsWith .war && package NotEndsWith .jar
时是必需的。 允许的值:auto
(自动检测)、zipDeploy
(Zip 部署)、runFromPackage
(从包运行)。 默认值:auto
。
为应用选择 部署方法。 可接受的值为 自动、zipDeploy和 runFromPackage。
任务控制选项
除任务输入之外,所有任务都具有控制选项。 有关详细信息,请参阅 控件选项和常见任务属性。
输出变量
此任务定义以下 输出变量,可以在下游步骤、作业和阶段中使用。
AppServiceApplicationUrl
所选 Azure 应用服务的应用程序 URL。
注解
使用此任务将 Web 应用程序部署到 Azure 应用服务。
部署方法
此任务提供了多个部署方法。
Auto
是默认选项。
若要在设计器任务中更改基于包的部署选项,请展开 其他部署选项 并启用 选择部署方法。
根据 Azure 应用服务和 Azure Pipelines 代理的类型,任务选择合适的部署技术。 任务使用的不同部署技术包括:
- Kudu REST API
- Zip 部署
- RunFromPackage
默认情况下,任务会尝试根据输入包、应用服务类型和代理 OS 选择适当的部署技术。
- 当应用服务类型为 Linux 应用上的 Web 应用时,请使用 Zip 部署
- 如果提供了 War 文件,请使用 War Deploy
- 如果提供了 Jar 文件,请使用 从包运行
- 对于所有其他内容,请使用 从 Zip 运行(通过 Zip 部署)
在非 Windows 代理(对于任何应用服务类型),任务依赖于 Kudu REST API 部署 Web 应用。
Kudu REST API
当目标为 Windows 上的 Web 应用、Linux 上的 Web 应用(内置源或 Function App)时,Kudu REST API 适用于 Windows 或 Linux 自动化代理。 该任务使用 Kudu 将文件复制到 Azure 应用服务。
Zip 部署
创建所选包或文件夹的 .zip 部署包。 然后,文件内容将部署到 Azure 应用服务中函数应用的 wwwroot 文件夹。 此选项覆盖 wwwroot 文件夹中的所有现有内容。 有关详细信息,请参阅 Azure Functions
RunFromPackage
创建与 Zip 部署相同的部署包。 但是,整个包由 Azure Functions 运行时装载,而不是将文件部署到 wwwroot 文件夹。 使用此选项,wwwroot 文件夹中的文件变为只读。 有关详细信息,请参阅 从包文件运行 Azure Functions。
错误:无法获取 Azure 的访问令牌。 验证所使用的服务主体是否有效且未过期。
该任务使用服务连接中的服务主体向 Azure 进行身份验证。 如果服务主体已过期或无权访问应用服务,则任务将失败,并出现此错误。 验证所使用的服务主体的有效性,以及它是否存在于应用注册中。 有关详细信息,请参阅 使用基于角色的访问控制来管理对 Azure 订阅资源的访问。 此博客文章 还包含有关使用服务主体身份验证的详细信息。
SSL 错误
如果要在应用服务中使用证书,证书必须由受信任的证书颁发机构签名。 如果 Web 应用提供了证书验证错误,则可能使用的是自签名证书。 将名为 VSTS_ARM_REST_IGNORE_SSL_ERRORS
的变量设置为生成或发布管道中的值 true
以解决错误。
发布会长时间挂起,然后失败
此问题可能是应用服务计划中容量不足的结果。 若要解决此问题,可以纵向扩展应用服务实例以增加可用的 CPU、RAM 和磁盘空间,或者尝试使用不同的应用服务计划。
5xx 错误代码
如果看到 5xx 错误,检查 Azure 服务的状态。
Azure 函数突然停止工作
如果自上次部署以来超过一年,Azure Functions 可能会突然停止工作。 如果在“deploymentMethod”中使用“RunFromPackage”进行部署,则会生成过期日期为 1 年的 SAS,并将其设置为应用程序配置中的“WEBSITE_RUN_FROM_PACKAGE”值。 Azure Functions 使用此 SAS 引用包文件来执行函数,因此,如果 SAS 已过期,则不会执行该函数。 若要解决此问题,请再次部署,以生成到期日期为一年的 SAS。
错误:找不到具有指定模式的包
检查任务中提到的包是否发布为生成或上一阶段中的项目,并在当前作业中下载。
错误:msBuild 包类型不支持使用 zip 部署选项发布
通过 MSBuild 任务(具有默认参数)创建的 Web 包具有嵌套文件夹结构,该结构只能由 Web 部署正确部署。 发布到 zip 部署选项不能用于部署这些包。 若要转换打包结构,请执行以下步骤:
在生成解决方案任务中,将 MSBuild 参数 更改为
/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent"
:添加存档任务并更改值,如下所示:
将 根文件夹或文件更改为存档 以
$(System.DefaultWorkingDirectory)\\WebAppContent
。清除 将根文件夹名称追加到存档路径 复选框:
常见问题解答
AzureWebApp
和 AzureRmWebAppDeployment
任务之间的区别是什么?
Azure Web 应用任务(AzureWebApp
)是部署到 Azure Web 应用的最简单方法。 默认情况下,部署发生在 Azure Web 应用中的根应用程序。
Azure 应用服务部署任务(AzureRmWebAppDeployment
) 可以处理更多自定义方案,例如:
- 修改 Web 包和 XML 参数文件中 的配置设置。
- 如果用于 IIS 部署过程,使用 Web 部署进行部署。
- 部署到虚拟应用程序。
- 部署到其他应用类型,例如容器应用、函数应用、WebJobs 或 API 和移动应用。
注释
单独的 文件转换任务 也支持文件转换和变量替换,以便在 Azure Pipelines 中使用。 可以使用文件转换任务对任何配置和参数文件应用文件转换和变量替换。
Windows 上的 Web 应用部署成功,但应用不起作用
这可能是因为应用中不存在 web.config。 可以使用 应用程序和配置设置将 web.config 文件添加到源或自动生成文件。
单击该任务,转到 为 Python、Node.js、Go 和 Java 应用生成web.config 参数。
单击“更多”按钮
...
编辑参数。从下拉列表中选择应用程序类型。
单击“确定”。 这将填充生成 web.config所需的 web.config 参数。
应用服务环境上的 Web 应用部署(ASE)不起作用
- 确保 Azure DevOps 生成代理与 ASE 的内部负载均衡器(ILB)位于同一 VNET(子网)上。 这将使代理能够从 Azure DevOps 拉取代码并部署到 ASE。
- 如果使用 Azure DevOps,则代理不需要从 Internet 访问,但只需要出站访问权限才能连接到 Azure DevOps Service。
- 如果使用虚拟网络中部署的 TFS/Azure DevOps Server,则可以完全隔离代理。
- 必须配置生成代理,并配置它需要部署到的 Web 应用的 DNS 配置。 虚拟网络中的专用资源在 Azure DNS 中没有条目,因此需要将其添加到代理计算机上的主机文件。
- 如果将自签名证书用于 ASE 配置,则需要在 MSDeploy 的部署任务中设置
-allowUntrusted
选项。 此外,建议将变量VSTS_ARM_REST_IGNORE_SSL_ERRORS
设置为true
。 如果证书颁发机构的证书用于 ASE 配置,则不需要这样做。
如何配置服务连接?
此任务需要 Azure 资源管理器服务连接。
如何使用 Application Insights 配置 Web 作业部署?
部署到应用服务时,如果已配置 Application Insight s,并且已启用 Remove additional files at destination
,则还需要启用 Exclude files from the App_Data folder
。 启用此选项可使 Application Insights 扩展处于安全状态。 此步骤是必需的,因为 Application Insights 连续 WebJob 安装在 App_Data 文件夹中。
部署到应用服务时,如果代理位于代理后面,应如何配置代理?
如果自承载代理需要 Web 代理,可以在配置过程中通知代理有关代理的信息。 这样做允许代理通过代理连接到 Azure Pipelines 或 Azure DevOps Server。 详细了解如何在 Web 代理后面运行自承载代理。
例子
下面是一个 YAML 代码片段,用于将 Web 应用程序部署到在 Windows 上运行的 Azure Web 应用服务。
variables:
azureSubscription: Contoso
# To ignore SSL error uncomment the below variable
# VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
steps:
- task: AzureWebApp@1
displayName: Azure Web App Deploy
inputs:
azureSubscription: $(azureSubscription)
appName: samplewebapp
package: $(System.DefaultWorkingDirectory)/**/*.zip
若要在 Linux 上部署 Web 应用,请添加 appType
参数并将其设置为 appType: webAppLinux
。
若要将部署方法指定为 Zip Deploy,请添加参数 deploymentMethod: zipDeploy
。 此参数的另一个支持值是 runFromPackage
。
如果未指定,则 auto
为默认值。