如何检查ADO流水线构建产物是否生成 解决.ps1路径无效报错
报错根因
当前报错由核心配置错误直接导致,同时还存在两处会阻断校验逻辑的隐藏问题:
PowerShell@2任务未指定执行类型:该任务默认targetType值为filePath,即默认要求传入.ps1脚本的本地路径,你直接写入内联脚本但未声明targetType: 'inline',任务会将脚本内容当做文件路径解析,最终命中默认工作目录/home/vsts/work/1/s抛出无效路径错误。- 文件校验路径错误:
PublishBuildArtifacts@1任务中ArtifactName: 'www'是制品上传到DevOps制品库后的显示名称,不会在$(Build.ArtifactStagingDirectory)下生成www子目录,你写的校验路径多了一层/www,就算任务跑通也会判断为文件不存在。 - 变量作用域错误:你在构建阶段设置的
FileExists变量默认作用域仅限当前Job,下游独立的deploy阶段无法直接读取该变量,直接在stage条件里调用会拿到空值,判断逻辑失效。
可直接复用的修正配置
# 构建阶段内的任务配置 - task: PublishBuildArtifacts@1 inputs: PathtoPublish: $(Build.ArtifactStagingDirectory) ArtifactName: 'www' - task: PowerShell@2 name: CheckFileTask # 为任务指定名称,供下游跨阶段引用 inputs: targetType: 'inline' # 核心修复:声明为内联脚本模式,解决.ps1路径报错 script: | # 修正校验路径,移除多余的/www层级 $targetFile = "$(Build.ArtifactStagingDirectory)/dist/apps/poc/index.html" $existResult = Test-Path -Path $targetFile Write-Host "Target file path: $targetFile, exist status: $existResult" # 标记为输出变量,支持跨阶段传递 Write-Output "##vso[task.setvariable variable=FileExists;isOutput=true]$existResult" # 部署阶段配置 - stage: deploy dependsOn: Build # 替换为你实际的构建阶段名称 # 按跨阶段输出变量格式引用,注意值为字符串类型的'True',需要加引号 # 格式说明:dependencies.[构建阶段名].outputs['[构建Job名].[PowerShell任务名].[变量名]'] condition: and(succeeded(), eq(dependencies.Build.outputs['BuildJob.CheckFileTask.FileExists'], 'True')) jobs: - job: Deploy steps: # 此处写入你的部署步骤
配置注意事项
- 请将上述配置中
Build(构建阶段名)、BuildJob(构建阶段下的Job名)替换为你流水线中实际的命名,否则变量引用会失效。 - PowerShell输出的变量值为字符串格式,判断条件中不要直接写布尔值
True,要写字符串形式的'True'。 - 如果需要确认路径是否正确,可以在PowerShell脚本中加
Get-ChildItem $(Build.ArtifactStagingDirectory) -Recurse命令打印目录结构,方便排查层级错误。
内容的提问来源于stack exchange,提问作者Leo Farmer
相关产品推荐
相关产品推荐

