如何在PowerShell任务中更新Azure Pipeline变量?含CLI与脚本疑问
无需Azure CLI更新Azure流水线变量的方法
首先明确:你用##vso[task.setvariable]的方向是对的,但同一个任务里没法直接通过$(AppVersion)看到更新后的变量值——因为Azure DevOps的变量替换是在任务执行之前就完成的,所以当前任务里的$(AppVersion)会一直是初始值。
正确的操作分两种场景:
1. 让更新后的变量在后续任务中生效
直接用##vso[task.setvariable]指令即可,无需额外设置isOutput=true(除非要跨阶段传递),示例脚本:
# 输出初始变量值 Write-Host "初始AppVersion: $(AppVersion)" # 更新变量,传递给后续任务 ##vso[task.setvariable variable=AppVersion]9.0.0 # 若要在当前任务验证环境变量是否更新,可读取环境变量 Write-Host "当前任务内环境变量AppVersion: $env:AppVersion"
后续任务中使用$(AppVersion)就能拿到更新后的9.0.0。
2. 在同一个任务内使用更新后的值
如果要在当前任务后续代码里用到新版本,直接用PowerShell变量即可,无需依赖流水线变量替换:
$newAppVersion = "9.0.0" # 输出初始流水线变量 Write-Host "初始AppVersion: $(AppVersion)" # 更新流水线变量给后续任务 ##vso[task.setvariable variable=AppVersion]$newAppVersion # 后续代码直接使用$newAppVersion变量 Write-Host "当前任务内使用的新版本: $newAppVersion"
原脚本未生效的原因
$(AppVersion)在任务启动前就被替换成初始值18.13.0了,所以最后一行Write-Host $(AppVersion)无论怎么设置,输出的都是初始值。isOutput=true是用来将变量作为任务输出,供其他任务通过任务名.变量名引用的,普通同阶段后续任务不需要添加这个参数。
内容的提问来源于stack exchange,提问作者Jorge Zuverza
相关产品推荐
相关产品推荐

