Azure DevOps经典管道中跨任务获取PowerShell变量失败的排查
Azure DevOps经典管道PowerShell任务跨任务传变量解决方案
1. 第一个PowerShell任务的正确配置
- 打开第一个PowerShell任务的高级选项卡,设置一个无空格的引用名称(比如
GetLastWorkItemTask) - 保留正确的输出变量命令,脚本无需修改:
$result = Invoke-Sqlcmd ` -ConnectionString "Server=..." ` -Query "SELECT TOP (1) work_item FROM ..." Write-Host $result.work_item $lastWorkItem = $result.work_item Write-Host $lastWorkItem Write-Host "##vso[task.setvariable variable=lastWorkItem;isOutput=true]$lastWorkItem"
- 确保任务执行成功,查看任务日志确认
##vso[task.setvariable...]命令已正常输出
2. 后续任务获取变量的正确方式
在第二个PowerShell任务的脚本中,必须使用任务引用名称.变量名的格式调用变量。比如第一个任务引用名称是GetLastWorkItemTask,脚本写法如下:
Write-Host $(GetLastWorkItemTask.lastWorkItem)
常见排查点
- 第一个任务的引用名称不能包含空格或特殊字符,它是任务的唯一标识
- 不要移除
isOutput=true参数,跨任务传递变量必须标记为输出变量 $(env:lastWorkItem)仅适用于同一任务内的环境变量获取,跨任务无效(每个任务是独立进程,环境变量不共享)- 检查第一个任务的日志,确认Azure DevOps已解析
##vso命令(日志会显示类似“已设置变量lastWorkItem”的提示)
内容的提问来源于stack exchange,提问作者awj
相关产品推荐
相关产品推荐

