有没有办法在Powershell脚本中访问TeamCity系统属性?

时间:2012-11-07 21:32:59

标签: powershell teamcity

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

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

这是否可以通过Powershell运行器实现,如果是这样,它的工作原理是什么?

4 个答案:

答案 0 :(得分:33)

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

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

$env:PATH

可以通过替换来访问TeamCity变量。使用_,所以build.number变量可以作为

访问
$env:build_number

答案 1 :(得分:14)

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

我想到写一个的psake优化的构建运行器,但在此期间你可以执行以下操作之一:

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

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

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

答案 2 :(得分:6)

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

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

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

$build_number = %build.number%

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

答案 3 :(得分:1)

我创建了一个元运行器,它将把System参数传递给Powershell脚本中声明的参数。它并不完美(如果你在你的来源中放置它会破坏它)但它适用于我需要的东西,你可以在这里找到它:https://gist.github.com/anonymous/ef60ada3f48f0fb25093