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

Pau*_*aul 22 powershell teamcity

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

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

这是否可以与Powershell运行器一起使用,如果是这样,它的工作原理是什么?

Mar*_*cus 33

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

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

$env:PATH
Run Code Online (Sandbox Code Playgroud)

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

$env:build_number
Run Code Online (Sandbox Code Playgroud)


pie*_*rs7 15

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

我想到写一个psake优化的构建运行,但同时你可以执行以下操作之一:

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

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

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


Ale*_*ček 6

它是可行的.以下是如何将系统属性传递到PSake脚本的示例:

& .\psake.ps1 -parameters @{build_number=%build.number%; personal_build=%build.is.personal%}
Run Code Online (Sandbox Code Playgroud)

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

$build_number = %build.number%
Run Code Online (Sandbox Code Playgroud)

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