Azure DevOps Pipeline上传文件至Azure Storage失败求助
问题分析与解决方案
核心问题总结
- 路径语法错误:SourcePath末尾多了多余的右括号
),导致路径无效 - 路径指向错误:Deploy阶段错误使用
$(Build.SourcesDirectory)(源码目录),而工件下载后实际存储在$(Pipeline.Workspace) - 工件发布范围错误:Build阶段发布了整个
$(Pipeline.Workspace),而非仅包含产物的$(build.artifactstagingdirectory)
修正后的配置
1. 修正Build.yml的工件发布步骤
原Publish任务错误发布了整个Pipeline.Workspace,应改为发布$(build.artifactstagingdirectory),确保drop工件仅包含需要部署的内容:
jobs: - job: pool: vmImage: 'ubuntu-latest' steps: - task: UseRubyVersion@0 displayName: Use Ruby >= 2.4 - task: CopyFiles@2 displayName: Copy Folder Armtemplates inputs: SourceFolder: 'armtemplates' TargetFolder: '$(build.artifactstagingdirectory)/armtemplates' - task: CopyFiles@2 displayName: Copy Folder Pipelines inputs: SourceFolder: 'pipelines' TargetFolder: '$(build.artifactstagingdirectory)/pipelines' - task: CopyFiles@2 displayName: Copy Folder Scripts inputs: SourceFolder: 'scripts' TargetFolder: '$(build.artifactstagingdirectory)/scripts' - task: Bash@3 inputs: filePath: '$(Build.SourcesDirectory)/scripts/InstallJekyll.sh' workingDirectory: '$(Build.SourcesDirectory)/editor-docs' displayName: Install Jekyll and bundler - task: CopyFiles@2 displayName: Copy Folder _site inputs: SourceFolder: 'editor-docs/_site' TargetFolder: '$(build.artifactstagingdirectory)/editor-docs' - task: PublishPipelineArtifact@1 displayName: 'Publish Artifact To Pipeline' inputs: targetPath: '$(build.artifactstagingdirectory)' # 修正此处,仅发布产物目录 artifact: 'drop' publishLocation: 'pipeline'
2. 修正Deploy.yml的AzureFileCopy配置
- 移除SourcePath末尾的多余
) - 替换
$(Build.SourcesDirectory)为$(Pipeline.Workspace)(工件下载后的正确路径)
jobs: - job: DeployStaticWebsite pool: vmImage: 'ubuntu-latest' steps: - download: current artifact: drop - task: AzureFileCopy@5 displayName: Upload Web Files To Storage inputs: SourcePath: '$(Pipeline.Workspace)/drop/editor-docs' # 修正路径,移除多余括号并指向正确目录 azureSubscription: TestSubscriptionStorageAccount Destination: 'AzureBlob' storage: '$(StorageAccountNameStaticWebApp)' ContainerName: 'test'
额外验证步骤
若仍有路径问题,可在Deploy阶段添加Bash步骤打印路径,确认目录存在:
- task: Bash@3 displayName: Verify Artifact Path inputs: targetType: 'inline' script: | ls -la $(Pipeline.Workspace)/drop/editor-docs
内容的提问来源于stack exchange,提问作者Sergio
相关产品推荐
相关产品推荐

