从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
相关产品推荐
相关产品推荐

