Azure Pipeline PowerShell任务控制台未输出预期内容abcde的问题排查
解决Azure Pipeline中Logging Command变量无法立即读取的问题
你遇到的核心问题是:Azure Pipeline的##vso[task.setvariable]命令设置的变量,不会在当前任务的上下文里立即生效。这个变量要等当前任务完全执行完毕后,才会被Pipeline引擎注入到后续任务的运行环境中。所以你在同一个PowerShell任务里刚设置完就用$(json),根本读不到这个新值。
下面给你两种针对性的解决方式:
方式1:在后续任务中读取Pipeline变量
如果你的目标是让后续任务能使用这个json变量,只需要把读取变量的操作放到下一个独立任务里就行:
# Starter pipeline trigger: - main pool: vmImage: ubuntu-latest steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | Write-Output abcde > abc.txt $letters = Get-Content .\abc.txt # 设置Pipeline变量,供后续任务使用 write-host "##vso[task.setvariable variable=json]$letters" # 当前任务里验证内容的话,直接用脚本本地变量$letters write-host "当前脚本读取到的内容:$letters" # 新增任务读取Pipeline变量 - task: PowerShell@2 inputs: targetType: 'inline' script: | write-host "Pipeline变量json的值:$(json)"
执行后第二个任务会正确输出abcde。
方式2:同一个任务内直接使用脚本本地变量
如果只是在当前任务里需要用到这个值,完全没必要设置Pipeline变量,直接用脚本里的$letters就行:
# Starter pipeline trigger: - main pool: vmImage: ubuntu-latest steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | Write-Output abcde > abc.txt $letters = Get-Content .\abc.txt # 直接使用本地变量验证内容 write-host "读取到的内容:$letters" # 只有后续任务需要用到时,再设置Pipeline变量 write-host "##vso[task.setvariable variable=json]$letters"
简单总结:##vso[task.setvariable]是用来跨任务传递数据的,同一个任务内直接用脚本自身的变量更高效。
内容的提问来源于stack exchange,提问作者user9142877
相关产品推荐
相关产品推荐

