YAML流水线作业间变量依赖失效问题排查
问题原因及解决方案
你的问题出在PowerShell任务中使用Write-Output输出##vso命令时,Azure DevOps可能没有正确捕获该命令,导致作业A的输出变量未被标记为跨作业可用的输出变量——作业A内部能正常引用是因为同一作业内的任务变量传递不依赖isOutput=true的配置,不需要走跨作业的输出变量机制。
修复步骤
将作业A中的PowerShell任务输出方式从Write-Output改为Write-Host(或直接调用控制台输出),确保##vso命令被Azure DevOps的任务日志正确捕获:
trigger: none stages: - stage: build jobs: - job: A steps: - powershell: | Write-Host "##vso[task.setvariable variable=MyVar;isOutput=true]zomg" name: ProduceVar - script: echo $(ProduceVar.MyVar) # 仍会正常打印zomg - job: B dependsOn: A condition: eq(dependencies.A.outputs['ProduceVar.MyVar'], 'zomg') variables: varFromA: $[ dependencies.A.outputs['ProduceVar.MyVar'] ] steps: - script: echo $(varFromA) # 现在会正常打印zomg
额外验证点
- 确认YAML缩进正确:
jobs必须属于stage: build的子节点(你的现有缩进是正确的,无需调整) - 检查作业名称和任务名称的拼写:
A、ProduceVar、MyVar均无拼写错误 - 确保作业A成功执行:只有成功完成的作业,其输出变量才能被后续作业引用
内容的提问来源于stack exchange,提问作者Nikola Malešević
相关产品推荐
相关产品推荐

