使用YAML流水线部署Azure Function时遇包找不到错误求助
问题
使用YAML流水线构建并部署Azure Function时,构建与发布阶段运行正常,能生成并下载zip包,但部署阶段持续失败,报错信息:
No package found with specified pattern: D:\a\1\drop\output.zip
已尝试调整环境变量和路径正反斜杠,vmImageName设置为windows-latest,部署阶段输出:
- Downloading: D:\a\1/drop/output.zip
- Error: No package found with specified pattern: D:\a\1\drop\output.zip
构建阶段代码:
- stage: Build displayName: Build solution jobs: - job: Build displayName: Build and publish solution pool: vmImage: $(vmImageName) workspace: clean: all steps: - checkout: self - checkout: AzureUtil - task: DotNetCoreCLI@2 displayName: Build and Publish Azure Function inputs: command: publish arguments: '--configuration Release --output publish_output' projects: $(projectsPath)/$(projectFileName) publishWebProjects: false modifyOutputPath: false zipAfterPublish: false - task: ArchiveFiles@2 displayName: "Archive files" inputs: rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output" includeRootFolder: false replaceExistingArchive: true archiveFile: $(Build.ArtifactStagingDirectory)\output.zip' - task: PublishBuildArtifacts@1 displayName: "Publish build artifacts" inputs: PathtoPublish: $(Build.ArtifactStagingDirectory)\output.zip' artifactName: 'drop'
部署阶段代码:
- stage: Deploy displayName: Deploy Azure Function dependsOn: Build condition: succeeded() jobs: - deployment: Deploy displayName: Deploy Azure Function pool: vmImage: $(vmImageName) environment: 'Web-Dev' strategy: runOnce: deploy: steps: - task: AzureFunctionApp@1 displayName: 'Azure functions app deploy' inputs: azureSubscription: '$(serviceConnectionName)' appType: functionApp appName: '$(azureFunctionName)' package: '$(Pipeline.Workspace)\drop\output.zip'
问题排查与解决
你的构建阶段存在语法错误,导致实际发布的构件路径不符合预期:
多余单引号引发路径错误
在ArchiveFiles@2任务的archiveFile参数,以及PublishBuildArtifacts@1任务的PathtoPublish参数末尾,都多了一个单引号:- 错误写法:
$(Build.ArtifactStagingDirectory)\output.zip' - 正确写法:
$(Build.ArtifactStagingDirectory)\output.zip
这个多余的单引号会让系统生成的zip文件名变成
output.zip'(带单引号),但部署阶段寻找的是无单引号的output.zip,因此出现找不到文件的错误。- 错误写法:
可选优化:显式添加构件下载任务
对于deployment类型的作业,建议显式添加构件下载任务,确保构件被正确拉取到部署代理:- task: DownloadBuildArtifacts@0 inputs: buildType: 'current' downloadType: 'single' artifactName: 'drop' downloadPath: '$(Pipeline.Workspace)'
修正后的构建阶段关键代码
- task: ArchiveFiles@2 displayName: "Archive files" inputs: rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output" includeRootFolder: false replaceExistingArchive: true archiveFile: $(Build.ArtifactStagingDirectory)\output.zip - task: PublishBuildArtifacts@1 displayName: "Publish build artifacts" inputs: PathtoPublish: $(Build.ArtifactStagingDirectory)\output.zip artifactName: 'drop'
内容的提问来源于stack exchange,提问作者user1005448
相关产品推荐
相关产品推荐

