用于容器的 Azure 函数应用任务

Azure DevOps Services

使用此任务使用 自定义映像在 Linux 上部署 Azure Function。

任务输入

参数描述
azureSubscription
Azure 订阅
(Azure 资源管理器服务连接所需的) 名称。
appName
应用名称
(容器的函数应用所需的) 名称。
deployToSlotOrASE
部署到槽或应用服务环境
(可选) 设置为 true 以部署到现有部署槽位或Azure 应用服务环境。 对于这两个目标,任务都需要资源组名称。 对于部署槽选项,默认值是部署到 生产 槽,也可以指定任何其他现有槽名称。 如果部署目标是Azure 应用服务环境,请将槽名称保留为生产环境,只需指定资源组名称。
默认值:false
resourceGroupName
资源组
如果 deployToSlotOrASE 为 true) 包含容器函数应用的资源组的名称,则 (必需。
slotName
槽位
(“必需”) Enter 或选择 生产 槽以外的现有槽。
默认值:生产
imageName
映像名称
(要用于部署的必需) 映像。
示例: myregistry.azurecr.io/nginx:latest
containerCommand
启动命令
(部署后要执行的可选) 启动命令。
appSettings
应用设置
(可选) 使用语法“-key value”输入的应用程序设置。 包含空格的值应用双引号括起来。
示例: -Port 5000 -RequestTimeout 5000 -WEBSITE_TIME_ZONE“东部标准时间”
configurationStrings
配置设置
(可选) 使用语法“-key value”输入的配置字符串。 包含空格的值应用双引号括起来。
示例: -phpVersion 5.6 -linuxFxVersion: node|6.11

示例

此示例使用容器在 Linux 上部署Azure Functions:


variables:
  imageName: contoso.azurecr.io/azurefunctions-containers:$(build.buildId)
  azureSubscription: Contoso
  # To ignore SSL error uncomment the following variable
  # VSTS_ARM_REST_IGNORE_SSL_ERRORS: true

steps:
- task: AzureFunctionAppContainer@1
  displayName: Azure Function App on Container deploy
  inputs:
    azureSubscription: $(azureSubscription)
    appName: functionappcontainers
    imageName: $(imageName)

故障排除

错误:无法提取 Azure 的访问令牌。 验证所使用的服务主体是否有效且未过期。

该任务使用服务连接中的服务主体通过 Azure 进行身份验证。 如果服务主体已过期或无权访问App 服务,则任务将失败,并出现此错误。 验证所使用的服务主体的有效性,以及它是否存在于应用注册中。 有关详细信息,请参阅 使用基于角色的访问控制来管理对 Azure 订阅资源的访问权限此博客文章 还包含有关使用服务主体身份验证的详细信息。

SSL 错误

如果要在App 服务中使用证书,则必须由受信任的证书颁发机构签名该证书。 如果 Web 应用显示证书验证错误,可能是因为使用了自签名证书。 设置一 VSTS_ARM_REST_IGNORE_SSL_ERRORS 个名为生成或发布管道中的值的 true 变量以解决错误。

发布长时间挂起,然后失败

此问题可能是App 服务计划中容量不足的结果。 若要解决此问题,可以纵向扩展App 服务实例以提高可用的 CPU、RAM 和磁盘空间,或者尝试使用不同的App 服务计划。

5xx 错误代码

如果看到 5xx 错误, 请检查 Azure 服务的状态

常见问题

如何配置服务连接?

此任务需要 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 代理后面运行自承载代理

开放源

此任务在 GitHub 上开放源代码。 欢迎提供反馈和建议。