如何在同一次Pipeline运行中覆盖VERSIONNEW变量的值?
问题描述
在Pipeline的第一步中将新值存入VERSIONNEW变量,该变量在新运行中已更新为1039,但在同一次运行里VERSIONNEW仍保留旧值1035。请问是否有办法在同一次运行中覆盖该变量的值?
已尝试的代码
$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/Release/definitions/$($env:RELEASE_DEFINITIONID)?api-version=5.0-preview.3" Write-Host "URL: $url" $pipeline = Invoke-RestMethod -Uri $url -Headers @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" } Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)" # Update an existing variable named VERSIONNEW to its new value 1039 $pipeline.variables.VERSIONNEW.value = "1039" ####****************** update the modified object ************************** $json = @($pipeline) | ConvertTo-Json -Depth 99 $updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} write-host "==========================================================" Write-Host "The value of Varialbe 'VERSIONNEW' is updated to" $updatedef.variables.VERSIONNEW.value write-host "=========================================================="
解决方案
你当前通过API修改的是发布定义中的变量值,这个修改只会作用于后续启动的Pipeline运行。当前运行的变量在启动时就已经加载到运行上下文里,所以不会自动同步定义里的更新。要在同一次运行中覆盖变量值,分两种场景处理:
1. 让后续步骤使用新值
如果需要让当前运行的后续步骤拿到更新后的VERSIONNEW值,可以在修改完定义变量后,添加Azure DevOps的变量设置命令:
# 在当前运行的上下文中设置变量,后续步骤可用 Write-Host "##vso[task.setvariable variable=VERSIONNEW;]1039"
这个命令只会修改当前运行的变量上下文,不会影响发布定义,搭配你原有的API修改代码,就能同时实现“更新定义变量”和“当前运行后续步骤用新值”的需求。
2. 同一脚本内立即使用新值
如果只是在当前执行的这个PowerShell脚本里需要立即使用新值,直接在脚本内重新赋值即可:
$VERSIONNEW = "1039" # 后续脚本代码里就能直接用这个新值
内容的提问来源于stack exchange,提问作者misolo89
相关产品推荐
相关产品推荐

