如何在Azure Dev Ops Build Pipline中访问Windows环境变量?

时间:2020-09-10 21:36:52

标签: azure-devops environment-variables

我们的许多C ++项目引用通过控制面板>系统和安全性>系统>高级系统设置>环境变量>系统变量设置的自定义环境变量。这只是通往各种所需库的路径。例如,键:LibraryLocation,值:C:\ libraries,在代码中由$(LibraryLocation)引用。

我假设可以自动找到该对象,而无需将其定义为构建管道的一部分,但是即使我在Pipeline变量下将此键值对的副本或作为MSBuild参数添加,我们的构建也会失败:< / p>

/p:LibraryLocation=$(LibraryLocation) //fails
/p:LibraryLocation="C:\libraries" //fails

以上所有尝试均在调试输出中产生以下结果:

/IC:\libraries\Boost\v1.70.0\include //notice the lack of quotations

我还尝试将以下内容添加到管道变量中:

LibraryLocation = %LibraryLocation%
LibraryLocation = env:LibraryLocation

似乎“值”是Pipeline变量中的文字,因此上述方法均无效。

好像Windows中定义的此全局系统变量不存在。

我尝试搜索解决方案,但似乎构建管道中的所有内容都被视为“环境变量”,而“系统变量”则具有另一个预定义的含义。我读过一些使用PowerShell任务进行设置的示例,但我不必这样做,因为它已经设置好了!

如何获取构建管道以识别操作系统中设置的此自定义环境变量?

谢谢。

2 个答案:

答案 0 :(得分:0)

写为here

环境变量特定于您使用的操作系统。它们以平台特定的方式注入到管道中。该格式对应于如何为您的特定脚本平台格式化环境变量。

在UNIX系统(macOS和Linux)上,环境变量的格式为$ NAME。在Windows上,批处理的格式为%NAME%,在PowerShell中的格式为$ env:NAME。

系统变量和用户定义变量也将作为平台的环境变量注入。将变量转换为环境变量时,变量名称变为大写,而句点变为下划线。例如,变量名any.variable变为变量名$ ANY_VARIABLE。

您应该可以通过以下方式之一访问Windows env变量:

  • %LIBRARYLOCATION%
  • env:图书馆位置

这对您来说哪个可行,您可以确定如何调用MSBuild。

您可以检查bash步骤中调用env | sort的变量。

当我从命令行脚本运行%PATH%时,我得到了:

enter image description here

这是当我从powershell任务运行'$ env:PATH`时的情况:

enter image description here

答案 1 :(得分:0)

原来是设置问题。尽我所能理解IT部门的解释,尽管我正确设置了环境变量,但作业仍被提交到了一个不知道该环境变量的代理池中。而且,正如我所怀疑的那样,现在在修复它们之后,无需定义Pipeline变量,也无需执行任务来设置环境变量,因为该版本已被构建识别。