【问题标题】:Is there a way to access TeamCity system properties in a Powershell script?有没有办法在 Powershell 脚本中访问 TeamCity 系统属性?
【发布时间】:2012-10-28 00:49:04
【问题描述】:

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

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

Powershell 运行器是否可以做到这一点,如果可以,需要什么语法才能使其正常工作?

【问题讨论】:

  • 根据题目答案是here

标签: powershell teamcity


【解决方案1】:

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

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

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

$build_number = %build.number%

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

【讨论】:

  • 也感谢您的回答。如果我在 TeamCity 中使用脚本输入模式,这将非常有用。
  • 我更喜欢这种方式,因为我的脚本可以与 Teamcity 或其他环境分离。
【解决方案2】:

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

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

$env:PATH

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

$env:build_number

【讨论】:

  • 谢谢,这行得通。我在试图让系统属性工作时有点挂了,但是环境变量现在可以完美地满足我的需求。我现在甚至都不确定是否需要系统属性。
  • @Marcus 这个语法正确吗?复制 $env:system_teamcity_build_checkoutDir\chromedriver.exe $env:system_teamcity_build_tempDir
  • 看起来有些参数去掉了“系统”前缀。例如%system.build.vcs.number% 实际上是$env:build_vcs_number
  • 这对我不起作用。 $env:build_number 在我的 powershell 源代码构建步骤中始终是空白的。然而,Teamcity 愿意将我的 powershell 源代码中的 %build.number% 直接替换为我想要的值。
  • “TeamCity 变量可通过将 . 替换为 _ 来访问”。这可能会产生误导,因为人们会认为他会在 TC 的 Env 变量中输入env.build.number,然后将其称为env.build_number。您必须将 Env 变量实际命名为 env.build_number 才能将其称为 env.build_number
【解决方案3】:

正如 TeamCity documentation 中所说,系统参数被传递给构建脚本运行器,但并非所有构建脚本运行器都知道如何处理它们。 对于 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 参数。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2022-08-23
      • 2022-08-02
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多