AzureRmWebAppDeployment找不到PublishArtifacts生成zip文件排查
确认PublishBuildArtifacts输出zip文件名的方法
有三种方式可以拿到准确的输出文件名,同时从根源避免路径匹配错误:
- 直接查看任务执行日志
点开对应流水线运行记录中的PublishBuildArtifacts@1任务,展开详细执行日志,日志会逐条列出该任务扫描、上传的所有文件的完整路径与文件名,无需修改流水线即可直接看到实际生成的zip名称。 - 新增内联任务打印目录结构
在PublishBuildArtifacts@1任务之前插入一个PowerShell任务,执行命令打印构建暂存目录下的所有文件,运行一次流水线即可在日志中看到完整的文件列表,对应配置片段:- task: PowerShell@2 inputs: targetType: 'inline' script: Get-ChildItem -Path '$(Build.ArtifactStagingDirectory)' -Recurse | Select-Object FullName, Length - 核对构建发布步骤的输出规则
之前.NET5场景下能正常找到s.zip,是因为当时的dotnet publish步骤配置了固定输出文件名;迁移.NET6重建项目后,这部分配置大概率被遗漏,系统会按默认规则生成zip:文件名与发布的项目名一致,如果解决方案下存在多个可发布项目,就会生成多个zip,这也是用*.zip通配符匹配到多个文件的根本原因。
根治路径匹配问题的方案
不要依赖系统自动生成的文件名,直接在dotnet publish步骤固定输出路径,明确指定要发布的目标项目,后续部署步骤引用固定路径即可,不会因为项目结构调整、配置变动出现找不到包、匹配到多个包的问题,参考配置:
# 固定dotnet publish输出路径,明确指定要发布的目标项目 - task: DotNetCoreCLI@2 inputs: command: 'publish' projects: '**/你的主Web项目.csproj' # 替换为实际要部署的项目文件路径,避免其他项目生成多余zip arguments: '--configuration Release -o $(Build.ArtifactStagingDirectory)/app-publish' zipAfterPublish: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/app-publish' ArtifactName: 'drop' - task: AzureRmWebAppDeployment@4 inputs: ConnectionType: 'AzureRM' azureSubscription: 'mySub' appType: 'webAppLinux' WebAppName: 'myApp' packageForLinux: '$(Build.ArtifactStagingDirectory)/app-publish/*.zip' RuntimeStack: 'DOTNETCORE|6.0'
注意:不要直接对
$(Build.ArtifactStagingDirectory)根目录做通配符匹配,该目录下可能存放构建过程生成的其他压缩包、日志文件,很容易匹配到错误的部署包。
内容的提问来源于stack exchange,提问作者Cef
相关产品推荐
相关产品推荐

