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

使用YAML部署Azure Function至FunctionApp槽时Zip文件找不到问题

问题

使用C#开发Azure Function,通过流水线实现构建→测试→发布代码→用Bicep搭建各环境基础设施→将发布的Function代码部署到对应Function App的流程,但部署时出现Zip文件找不到的错误:

##[error]Error: No package found with specified pattern: /home/vsts/work/1/a/*.zip

日志显示发布的Zip文件在/home/vsts/work/1/s目录下,但部署任务在/1/a目录查找。以下是发布和部署阶段的YAML配置:

发布阶段YAML

- task: DotNetCoreCLI@2
  displayName: "dotnet publish"
  inputs:
    command: publish
    arguments: '--configuration Release --output publish_output'
    projects: 'src/**/*.csproj'
    publishWebProjects: false
    modifyOutputPath: false
    zipAfterPublish: false
- task: ArchiveFiles@2
  displayName: "Archive files (into zip)"
  inputs:
    rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
    includeRootFolder: false
    archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
  displayName: "Publish build artifacts"
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'

部署阶段YAML

- task: AzureFunctionApp@1 # Add this at the end of your file
  displayName: 'Deploy Function code to FunctionApp Slot'
  inputs:    
    azureSubscription: 'ServiceConnection'
    appType: functionAppLinux # default is functionApp
    appName: 'f2404dev-app'
    package: '$(System.ArtifactsDirectory)/**/*.zip'
解决方案

问题核心是发布构件的配置不完整,以及部署阶段未正确处理构件的下载路径:

  1. 发布构件时需明确指定构件名称
    PublishBuildArtifacts@1任务默认会将构件发布到名为drop的集合中,若不指定artifactName,后续部署阶段查找时容易出现路径匹配问题。修改发布阶段的PublishBuildArtifacts@1任务,添加明确的构件名称:

    - task: PublishBuildArtifacts@1
      displayName: "Publish build artifacts"
      inputs:
        PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
        artifactName: 'function-build' # 指定唯一构件名称,避免混淆
    
  2. 部署阶段需先下载构件再引用
    若发布阶段和部署阶段不在同一个作业(Job)中,必须先添加下载构件的任务,将发布的Zip包拉取到部署作业的本地目录。修改部署阶段的配置:

    - task: DownloadBuildArtifacts@0
      displayName: 'Download build artifacts'
      inputs:
        buildType: 'current'
        downloadType: 'single'
        artifactName: 'function-build' # 和发布阶段指定的名称一致
        downloadPath: '$(System.ArtifactsDirectory)'
    - task: AzureFunctionApp@1
      displayName: 'Deploy Function code to FunctionApp Slot'
      inputs:    
        azureSubscription: 'ServiceConnection'
        appType: functionAppLinux
        appName: 'f2404dev-app'
        package: '$(System.ArtifactsDirectory)/function-build/**/*.zip' # 精确指向下载后的Zip包路径
    
  3. 可选:简化Zip包生成流程
    可以直接利用DotNetCoreCLI@2的内置功能生成Zip包,省去ArchiveFiles@2的步骤,减少出错点:

    - task: DotNetCoreCLI@2
      displayName: "dotnet publish and zip"
      inputs:
        command: publish
        arguments: '--configuration Release --output publish_output'
        projects: 'src/**/*.csproj'
        publishWebProjects: false
        modifyOutputPath: false
        zipAfterPublish: true # 自动生成Zip包
    - task: PublishBuildArtifacts@1
      displayName: "Publish build artifacts"
      inputs:
        PathtoPublish: '$(System.DefaultWorkingDirectory)/publish_output/*.zip' # 直接引用自动生成的Zip包
        artifactName: 'function-build'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:30:21