在Build vNext中更改任务之间的环境变量值

时间:2015-10-08 22:02:39

标签: powershell azure-devops

有没有办法在Visual Studio Team Services中的任务之间保持环境值的更改?我正在使用Powershell来改变它,但它只是在任务中改变它而不是整个过程。

脚本1

Write-Verbose "Before: $Env:SuperVersion"
$Env:SuperVersion = $NewVersion
Write-Verbose "After: $Env:SuperVersion"

脚本2

Write-Verbose "Final: $Env:SuperVersion"

我看到之后的变化,但最终始终获得原始值

4 个答案:

答案 0 :(得分:16)

根据this问题,以下行可以解决问题。

Write-Host ("##vso[task.setvariable variable=SuperVersion;]$NewVersion")

  

您可以在here

中找到更多类似的命令

答案 1 :(得分:1)

下面已经针对此问题发布了正确的答案,但我认为以下博客中的讨论专门针对设置构建变量的两种不同方式:一种变量仅在特定任务中可用它是设置的,另一个用于在一个任务中设置构建变量然后在另一个任务中访问它:

https://blogs.msdn.microsoft.com/premier_developer/2016/04/13/tips-for-writing-powershell-scripts-to-use-in-build-and-release-tasks/

答案 2 :(得分:0)

使用$env创建的环境变量:Process个变量,因此当进程退出时它们会丢失,您无法从其他进程(PowerShell实例)访问它们。

您需要创建UserMachine环境变量:

[Environment]::SetEnvironmentVariable('SuperVersion', $NewVersion, 'User')

[Environment]::SetEnvironmentVariable('SuperVersion', $NewVersion, 'Machine')

我不确定它会在VS Team Services中运行,你必须对它进行测试。

参考:

答案 3 :(得分:0)

我发现使用后 写主机(“ ## vso [task.setvariable variable = SuperVersion;] $ NewVersion”)
在同一任务中,该值没有更改,但是在以后的任务中,该值已更改。

这是在TFS 2018上使用嵌入式Powershell

第一次任务

$ENV:SuperVersion = "2.0"
Write-Host ("##vso[task.setvariable variable=SuperVersion;]"3.2"")
#  Output will be "2.0"
Write-Output $ENV:SuperVersion     
$ENV:SuperVersion = "5.5"
#  Output will be "5.5" but only within the scope of this task.
Write-Output $ENV:SuperVersion 

下一步任务

Write-Output $ENV:SuperVersion     
# Output is "3.2"