Azure DevOps CI/CD流水线部署报No package found错误
故障原因
Azure DevOps 多阶段流水线默认不会自动把前序阶段发布的构件拉取到后续阶段的作业工作目录。你在Build阶段成功上传到drop的构件只存在于流水线的公共构件存储区,Test阶段的部署作业没有配置拉取步骤,自然找不到对应路径的zip包。
修复方法
在Test阶段的Deploy作业步骤最开头,添加DownloadPipelineArtifact@2构件下载任务,显式拉取Build阶段发布的drop构件到指定路径。修改后的Test阶段完整配置如下:
- stage: Test dependsOn: Build condition: succeeded() jobs: - job: Deploy displayName: 'Deploy to Test' steps: # 新增:拉取Build阶段发布的drop构件 - task: DownloadPipelineArtifact@2 inputs: buildType: 'current' artifactName: 'drop' targetPath: '$(Pipeline.Workspace)/drop' # 原有部署任务无需修改 - task: AzureRmWebAppDeployment@4 inputs: ConnectionType: 'AzureRM' azureSubscription: 'xxx' appType: 'webApp' WebAppName: 'xxx' package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
补充排查技巧
- 如果修改后仍报找不到包的错误,可以在下载任务和部署任务之间加一个命令行步骤,执行
ls $(Pipeline.Workspace)/drop,运行流水线后直接查看日志输出的文件列表,快速确认文件名、路径是否和部署任务中的配置匹配。 - 注意不要混淆
$(Build.ArtifactStagingDirectory)和$(Pipeline.Workspace)的路径:前者是单阶段内构件暂存的本地路径,跨阶段无法直接访问;后者是跨阶段构件下载后的默认根路径。
内容的提问来源于stack exchange,提问作者anystacy
相关产品推荐
相关产品推荐

