如何将环境变量传递给解决方案构建步骤(Build vNext)

时间:2016-11-28 11:33:24

标签: powershell tfs build azure-pipelines azure-pipelines-build-task

目前我正在开发一个大型遗留项目,其中每个c#项目文件在后期构建事件中都有一个复制作业(使用C#编写的自定义工具)。

post build事件看起来像

"$(MyEnvVar)\_Build\_Binaries\CopyTool" "$(TargetDir)$(TargetName)" "$(MyEnvVar)\_Binaries"  

如您所见,复制作业的路径基于环境变量的值。

我现在想要构建另一个引用上面提到的一些项目的解决方案。

构建失败,因为没有为构建设置环境变量。

Build vNext定义中的构建步骤顺序:

SetEnv powershell脚本

[Environment]::GetEnvironmentVariable("MyEnvVar","Process")
Write-Host 'build sources dir'
Write-Host $Env:BUILD_SOURCESDIRECTORY
[Environment]::SetEnvironmentVariable("MyEnvVar", $Env:BUILD_SOURCESDIRECTORY, "Process")
  • Visual Studio构建步骤
  • Visual Studio测试
  • ...(索引,发布,复制,发布工件)

但是" MyEnvVar"在VS解决方案构建步骤执行的后期构建事件中无法访问。

如何实现VS Build步骤具有之前在TFS onPremise上的powershell脚本中设置的值(不是 VSO)?

2 个答案:

答案 0 :(得分:2)

找到解决方案。

创建了一个powershell脚本

Write-Host “##vso[task.setvariable variable=MY_BuildVariable]$Env:BUILD_SOURCESDIRECTORY”

并将其作为第一个构建步骤执行。

因为构建变量与环境变量具有相同的名称,所以环境变量的值将被powershell脚本的值覆盖。

请参阅Environment variables说明哪个 注意:如果在变量选项卡上定义了同名变量(例如PATH),那么当您使用环境变量时,您的值将覆盖环境变量。

答案 1 :(得分:0)

在Powershell中,您可以通过以下方式获取或设置任何环境变量:

#for a particular environmental variable
Get-Childitem env:computername
# for getting all the environmental variables
get-childitem -path env:*

#for Setting any value in any environmental variable
$env:Variable1 ="value1"

# For changing the vale of environmental variables
Set-Item -path env:Variable1 -value "Value2"