Azure Function App 任务
Azure DevOps Services
使用 Azure Function App 任务将 函数 部署到 Azure。
参数
| 参数 | 描述 |
|---|---|
azureSubscription(Azure 订阅) | (Azure 资源管理器 服务连接所需的) 名称。 |
appType(应用类型) | (“必需”) 函数应用类型。 选项:“functionAppLinux”、“functionApp” (默认) 。 |
appName(应用名称) | (现有应用服务的必需) 名称。 |
deployToSlotOrASE(部署到槽或App 服务环境) | (可选) 是部署到现有部署槽还是Azure 应用服务环境。 对于这两个目标,任务需要资源组名称。 如果部署目标为槽,则默认情况下,函数将部署到生产槽。 还可以提供任何其他现有槽名称。 如果部署目标是App 服务环境,请指定资源组名称。 默认值:30 false |
resourceGroupName(资源组) | 如果 deployToSlotOrASEtrue 资源组的名称) ,则 (必需。 |
slotName(槽) | 如果槽 deployToSlotOrASEtrue) 名称,则 (必需。默认值:30 production |
package(包或文件夹) | (包或包含由MSBuild或压缩的.zip或 .war 文件生成的App 服务内容的文件夹的必需) 文件路径。 支持 buildRelease | ) 和通配符 (变量。 例如,$ (System.DefaultWorkingDirectory) //*.zip 或 $ (System.DefaultWorkingDirectory) //*.war。 |
runtimeStack(运行时堆栈) | (Linux 上的可选) Web 应用提供了两种发布应用程序的方法:自定义映像部署 (用于容器的 Web 应用) ,以及使用 Linux) 上的内置平台映像 (Web 应用进行应用部署。 仅当选择 Linux Web 应用 作为任务中的应用类型时,才会看到此参数。 |
startUpCommand(Startup 命令) | (可选。 appType 如果 . webAppLinux) 启动命令在部署后运行,则相关。 |
customWebConfig(为 Python、Node.js、Go 和 Java 应用生成web.config文件参数) | (可选) 如果应用程序没有标准web.config文件,则会生成并部署到App 服务。 可以在web.config文件中编辑这些值。 它们因应用程序框架而异。 例如,对于Node.js应用程序,web.config文件将具有启动文件和iis_node模块值。 此编辑功能仅适用于生成的web.config文件。 了解详细信息。 |
appSettings(应用设置) | (可选) 应用程序设置。 使用语法 -key value。 用双引号括住包含空格的值。 例如, -Port 5000 -RequestTimeout 5000 -WEBSITE_TIME_ZONE "Eastern Standard Time"。 |
configurationStrings(配置设置) | (可选) 配置字符串。 使用语法 -key value。 用双引号括住包含空格的值。例如, -phpVersion 5.6 -linuxFxVersion: node|6.11。 |
deploymentMethod(部署方法) | (应用的必需) 部署方法 。 默认值:30 auto |
示例
下面是在 Windows 上部署 Azure 函数的示例 YAML 代码片段:
variables:
azureSubscription: Contoso
# To ignore SSL error, uncomment the below variable
# VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
steps:
- task: AzureFunctionApp@1
displayName: Azure Function App Deploy
inputs:
azureSubscription: $(azureSubscription)
appName: samplefunctionapp
package: $(System.DefaultWorkingDirectory)/**/*.zip
若要在 Linux 上部署函数,请添加 appType 参数并将其设置为 appType: functionAppLinux。 如果未指定值, functionApp 则为默认值。
若要将部署方法显式指定为 Zip Deploy,请添加参数 deploymentMethod: zipDeploy。 此参数支持的另一个值是 runFromPackage。
如果未指定值, auto 则为默认值。
有关如何创建 CI/CD 管道的演练,请参阅生成 Java 并将其部署到Azure Functions。
部署方法
此任务中提供了多个部署方法。 默认值是 auto。
若要更改设计器任务中的部署选项,请展开 “其他部署选项 ”,并启用 “选择部署方法” 以从其他基于包的部署选项中进行选择。
根据Azure 应用服务和Azure Pipelines代理的类型,任务使用合适的部署技术。 任务使用的部署技术如下所示:
Kudu REST API
Zip 部署
从包运行
默认情况下,任务会尝试根据输入包、App 服务类型和代理 OS 选择适当的部署技术。
- 如果提供了部署后脚本,请使用 Zip 部署。
- 如果App 服务类型为 Linux 上的 Web 应用,请使用 Zip 部署。
- 如果提供了 .war 文件,请使用 War Deploy。
- 如果提供了 .jar 文件,请使用 Run-From-Zip。
- 对于所有其他任务,请使用通过 Zip Deploy) 运行包 (。
对于任何App 服务类型) 的非Windows代理 (,任务依赖于 Kudu REST API 来部署 Web 应用。
Kudu REST API
当目标为 Windows 上的 Web 应用、Linux 上的 Web 应用 (内置源) 或函数应用时,Kudu REST API 适用于Windows和 Linux 自动化代理。 该任务使用 Kudu 将文件复制到Azure 应用服务。
Zip 部署
Zip Deploy 从所选包或文件夹中创建.zip部署包。 然后,它将文件内容部署到 Azure 中App 服务名称函数应用的 wwwroot 文件夹。 此选项覆盖 wwwroot 文件夹中的所有现有内容。 有关详细信息,请参阅适用于Azure Functions的 Zip 部署。
从包运行
从包运行会创建与 Zip 部署相同的部署包。 Functions 运行时将文件装载到整个包,而不是将文件部署到 wwwroot 文件夹。 使用此选项时,wwwroot 文件夹中的文件变为只读。 有关详细信息,请参阅从包文件运行 Azure Functions。
故障排除
错误:无法提取 Azure 的访问令牌。 验证所使用的服务主体是否有效且未过期。
该任务使用服务连接中的服务主体通过 Azure 进行身份验证。 如果服务主体已过期或无权访问App 服务,则任务将失败,并出现此错误。 验证所使用的服务主体的有效性,以及它是否存在于应用注册中。 有关详细信息,请参阅 使用基于角色的访问控制来管理对 Azure 订阅资源的访问权限。 此博客文章 还包含有关使用服务主体身份验证的详细信息。
SSL 错误
如果要在App 服务中使用证书,则必须由受信任的证书颁发机构签名该证书。 如果 Web 应用显示证书验证错误,可能是因为使用了自签名证书。 设置一 VSTS_ARM_REST_IGNORE_SSL_ERRORS 个名为生成或发布管道中的值的 true 变量以解决错误。
发布长时间挂起,然后失败
此问题可能是App 服务计划中容量不足的结果。 若要解决此问题,可以纵向扩展App 服务实例以提高可用的 CPU、RAM 和磁盘空间,或者尝试使用不同的App 服务计划。
5xx 错误代码
如果看到 5xx 错误, 请检查 Azure 服务的状态。
错误:找不到具有指定模式的包
检查任务中提及的包是否在生成或上一阶段中作为项目发布,以及是否已在当前作业中下载。
错误: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清除 “存档路径前根文件夹名称 ”复选框:
Windows上的函数应用部署成功,但应用不起作用
如果应用中不存在web.config文件,则可能会出现此问题。 可以将web.config文件添加到源,也可以使用任务的“应用程序和配置”设置自动生成一个文件。
选择该任务,然后转到 “为 Python、Node.js、Go 和 Java 应用生成web.config参数:
选择“ 为 Python、Node.js、Go 和 Java 应用生成web.config参数 ”下的“更多”按钮 (...) 以编辑参数:
在 应用程序框架 列表中选择应用程序类型。
选择“确定”。 这样做将填充生成web.config文件所需的web.config参数。
常见问题
如何配置服务连接?
此任务需要 Azure 资源管理器服务连接。
如何使用应用程序Insights配置 Web 作业部署?
部署到App 服务时,如果已配置应用程序Insights且已启用Remove additional files at destination,则还需要启用Exclude files from the App_Data folder。 启用此选项可使应用程序Insights扩展处于安全状态。 此步骤是必需的,因为应用程序Insights连续 WebJob 安装到 App_Data 文件夹中。
部署到App 服务时,如果代理位于代理后面,应如何配置代理?
如果自承载代理需要 Web 代理,可以在配置期间通知代理代理。 这样做允许代理通过代理连接到Azure Pipelines或Azure DevOps Server。 详细了解如何在 Web 代理后面运行自承载代理。
无法使用 Azure 资源管理器 服务连接和 Microsoft 托管的代理部署到内部App 服务环境
根据设计,Microsoft 托管的代理不适用于App 服务环境。 相反,需要在与App 服务环境位于同一虚拟网络的虚拟机上配置专用代理。 此外,设置专用 DNS 区域以启用资源之间的通信。
开源
此任务在 GitHub 上开放源代码。 欢迎提供反馈和建议。