我们的许多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任务进行设置的示例,但我不必这样做,因为它已经设置好了!
如何获取构建管道以识别操作系统中设置的此自定义环境变量?
谢谢。
答案 0 :(得分:0)
写为here
环境变量特定于您使用的操作系统。它们以平台特定的方式注入到管道中。该格式对应于如何为您的特定脚本平台格式化环境变量。
在UNIX系统(macOS和Linux)上,环境变量的格式为$ NAME。在Windows上,批处理的格式为%NAME%,在PowerShell中的格式为$ env:NAME。
系统变量和用户定义变量也将作为平台的环境变量注入。将变量转换为环境变量时,变量名称变为大写,而句点变为下划线。例如,变量名any.variable变为变量名$ ANY_VARIABLE。
您应该可以通过以下方式之一访问Windows env变量:
这对您来说哪个可行,您可以确定如何调用MSBuild。
您可以检查bash步骤中调用env | sort
的变量。
当我从命令行脚本运行%PATH%
时,我得到了:
这是当我从powershell任务运行'$ env:PATH`时的情况:
答案 1 :(得分:0)
原来是设置问题。尽我所能理解IT部门的解释,尽管我正确设置了环境变量,但作业仍被提交到了一个不知道该环境变量的代理池中。而且,正如我所怀疑的那样,现在在修复它们之后,无需定义Pipeline变量,也无需执行任务来设置环境变量,因为该版本已被构建识别。