26

我正在尝试使用 Powershell 运行器在 TeamCity 中设置新的构建配置。但是,我似乎找不到在构建脚本中访问 TeamCity 系统属性的方法。我已经看到了可能的提示,但找不到有关如何执行此操作的文档。

我尝试使用 Powershell 变量语法 $variable 访问系统属性。我还打印了内存中的所有变量,并且没有看到要使用的 teamcity 变量。

这对 Powershell 运行器是否可行,如果可以,使其工作所需的语法是什么?

4

4 回答 4

38

TeamCity 将设置环境变量,例如 build.number(您可以在 TeamCity 中查看这些变量的列表)。

在 Powershell 中,您可以使用env “提供程序”访问环境变量,例如

$env:PATH

TeamCity 变量可以通过替换 . 带有 _,因此 build.number 变量可以作为

$env:build_number
于 2012-11-08T10:05:53.910 回答
16

正如 TeamCity文档中所说,系统参数被传递给构建脚本运行器,但并非所有构建脚本运行器都知道如何处理它们。对于 Powershell 脚本运行程序,当使用脚本文件时,它们不会传播到您的脚本。

我突然想到要编写一个 psake 优化的构建运行程序但同时您可以执行以下操作之一:

  • 使用脚本源框中可用的参数扩展将任何 TeamCity 构建属性显式映射到脚本参数。例如.\build.ps1 -someParam:%build.name%

  • 使用环境参数,可以在 PowerShell 中使用$env:NAME_IN_TEAMCITY syntax, eg显式访问$env:TEAMCITY_VERSION,或者循环并推入变量范围

  • 访问 TeamCity 在构建期间提供的构建属性文件。该文件位于$env:TEAMCITY_BUILD_PROPERTIES_FILE,如果您加载 XML 版本,则很容易循环并将它们全部推送到范围内(当然,您确实将所有内容都作为字符串获取)。我发布了一个关于如何做到这一点的要点(https://gist.github.com/piers7/6432985)。或者,如果使用 Psake,修改上面的脚本以返回一个哈希表,您可以直接将其传递给 Psake 的 -properties 参数。

于 2013-09-04T05:28:59.950 回答
6

这是可能的。以下是如何将系统属性传递到 PSake 脚本的示例:

& .\psake.ps1 -parameters @{build_number=%build.number%; personal_build=%build.is.personal%}

如果你不使用 Psake,你可以像这样定义你的变量:

$build_number = %build.number%

%build.number%部分将替换为 TeamCity 提供的数据。我认为,它仅适用于源代码脚本输入模式。

于 2012-11-08T08:42:30.997 回答
1

我创建了一个元运行器,它将系统参数传递给 Powershell 脚本中声明的参数。它并不完美(如果你把'@放在你的源代码中它会中断)但它可以满足我的需要,你可以在这里找到它:https ://gist.github.com/anonymous/ef60ada3f48f0fb25093

于 2014-05-08T13:43:42.120 回答