You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Azure DevOps发布管道部署后函数应用为空求助排查

排查Azure Durable Functions部署后门户无函数列表的问题

问题背景

我们的Durable Function采用Function Chaining模式,包含2个客户端函数、2个编排器函数及多个活动函数。通过Azure Pipelines实现CI/CD:PR触发构建,develop分支更新后部署至预演环境。构建管道配置如下:

variables:
- name: BuildConfiguration
  value: Release

trigger:
  branches:
    include:
    - main
    - develop

pool:
  vmImage: windows-latest

jobs:
- job: 'CI_Job'
  displayName: 'Build and Publish Function App'
  continueOnError: false

  steps:
  - checkout: self
    clean: true
    
  - task: UseDotNet@2
    displayName: 'Install .NET SDK'
    inputs:
      packageType: 'sdk'
      version: '6.x'

  - task: DotNetCoreCLI@2
    displayName: 'Restore NuGet Packages'
    inputs:
      command: 'restore'
      projects: '**/*.csproj'

  - task: DotNetCoreCLI@2
    displayName: "Build Solution"
    inputs:
      command: 'build'
      projects: '**/*.csproj'
      arguments: '--configuration $(BuildConfiguration) --no-restore'


  - task: DotNetCoreCLI@2
    displayName: "Run Unit Tests"
    inputs:
      command: 'test'
      projects: 'test/**/*Tests.csproj'
      arguments: '--no-restore'
      testRunTitle: 'Test Functions'

  - task: DotNetCoreCLI@2
    displayName: "Publish Solution"
    inputs:
      command: 'publish'
      projects: '**/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: true
      arguments: --configuration $(BuildConfiguration) --no-restore --no-build --output $(Build.ArtifactStagingDirectory)

  - task: PublishBuildArtifacts@1
    displayName: "Publish Build Artifacts"
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      ArtifactName: '$(Build.Repository.Name)'
      publishLocation: 'Container'

当前问题:部署日志及Azure部署中心均显示成功,但Azure门户的函数应用中无任何函数列表。已尝试操作:确认WEBSITE_RUN_FROM_PACKAGE=1配置正确;设置SCM_DO_BUILD_DURING_DEPLOYMENT=true启用远程构建;Visual Studio的ZIP部署可正常生效;另一部署至槽位的函数应用使用类似发布管道可正常运行。

排查方向与解决方法

1. 构建管道发布范围包含非函数项目

当前Publish步骤的projects: '**/*.csproj'会将解决方案中所有项目(包括测试项目)都打包到输出目录,导致函数运行时无法正确识别主函数项目。

  • 解决方法:修改Publish步骤的projects参数,仅指向函数应用的csproj文件,例如:
    projects: '**/YourFunctionAppName.csproj'
    
    替换YourFunctionAppName为实际的函数项目名称,避免非函数项目混入发布包。

2. 发布包结构不符合函数运行时要求

当前Publish步骤设置modifyOutputPath: false,所有项目的输出文件会被放在同一根目录下,可能出现文件冲突(如多个web.config)或函数运行时找不到正确的入口程序集。

  • 解决方法:
    • 方法一:将modifyOutputPath改为true,让每个项目的输出放在单独子目录,然后在发布管道中指定函数项目对应的子目录作为部署源;
    • 方法二:如上述第1点,仅发布函数项目,确保发布包根目录是函数应用的正确输出结构。

3. 函数运行时版本不匹配

检查Azure函数应用的运行时版本是否与构建管道使用的.NET SDK版本一致:

  • 登录Azure门户,进入函数应用的配置 > 常规设置,确认.NET版本设置为6(与构建管道的6.x对应);
  • 如果是隔离进程模式,需确认运行时堆栈选择.NET 6 (Isolated)。

4. 检查发布包内容完整性

在Azure DevOps的构建artifact中下载发布的zip包,解压后验证:

  • 是否包含函数应用的核心文件:host.json、FunctionApp.dll、bin目录下的依赖程序集;
  • 是否存在测试项目的文件(如*Tests.dll),如果有说明发布范围未正确过滤。

5. 查看函数应用启动日志

通过Kudu控制台或Application Insights排查函数加载失败的具体原因:

  • 访问https://<your-function-app-name>.scm.azurewebsites.net,进入Debug console > CMD,导航到D:\home\LogFiles\Application\Functions\Host目录,查看最新的host.log文件,查找函数加载相关的错误信息(如程序集缺失、配置错误);
  • 开启Application Insights的日志收集,查看函数启动时的异常追踪。

6. 确认发布管道的部署配置

检查发布管道的Azure Functions Deploy任务配置:

  • 确认包或文件夹路径指向正确的函数应用发布包(如果使用多项目发布,需指定到函数项目的子目录);
  • 确认未覆盖影响函数加载的应用设置,例如是否误设了FUNCTIONS_WORKER_RUNTIME为错误值。

内容的提问来源于stack exchange,提问作者FFranz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:16:08