2

有什么方法可以使用 PowerShell 脚本读取 TeamCity 用户定义的参数值。

以下是我正在尝试做的事情。

我已经在 TeamCity 构建配置中创建了以下参数

Variable Name           Variable Value
=============           ==============
variable1               ABC
variable2               XYZ

以下是我在 PowerShell Buid 步骤中使用的 powershell 脚本:

    #Samplay array
    $Array = @("variable1","variable2","variable3","variable4","variable5")

    Foreach ($item in $Array)
    {
        $VariableValue = "%" + "$item" + "%"
        if ($VariableValue)
        {
            Write-Host "Found TeamCity Variable called '$item'. Corresponding variable value is '$VariableValue'"
        }
        else
        {
            Write-Host "There isn't any TeamCity variable called '$item3'. Aborting..."
            Exit -1
        }
    }

预期的输出是:

Found TeamCity Variable called 'variable1'. Corresponding variable value is 'ABC'
Found TeamCity Variable called 'variable2'. Corresponding variable value is 'XYZ'
There isn't any TeamCity variable called 'variable3'. Aborting...

我以为我可以使用 %teamcityvariablename% 格式访问 TeamCity 变量。但这似乎行不通。我不想硬编码脚本参数中的每个变量。因为变量总是会变化的。有人可以建议我如何在 PowerShell 构建步骤中使用 TeamCity 用户定义的参数(配置参数)。提前致谢。

4

1 回答 1

2

经过大量搜索和测试,我找到了解决方案。首先,似乎没有任何方法可以从 PowerShell 脚本中访问配置参数类型。如果有的话,我没有发现任何文档概述了这一点,也没有多少实验产生了访问这些参数的方法。因此,如果您的参数是配置参数类型,则需要将它们转换为环境参数。

环境参数都写为PowerShell本地执行范围内的环境变量。这意味着,如果您需要env.ConnectionString从 PowerShell 脚本中访问 TeamCity 参数,您可以像访问任何其他环境变量一样访问它。例子:

#TeamCity populated the env:ConnectionString before running the script.   
$ConnectionString = $env:ConnectionString 

关于系统参数类型参数,我认为也没有办法访问这些参数,但我可能是错的。我不必使用系统参数,所以我不必尝试访问这些参数。

另请注意,我们在项目中使用实际的 PowerShell 脚本。在 TeamCity PowerShell 构建步骤中,有一个选项可以将 PowerShell 代码作为“文件”或“源代码”执行。我不确定“源代码”选项是否具有更大的灵活性,因为您获得了一个 TeamCity 文本区域来定义 PowerShell 代码。他们可能会在 PowerShell 中执行之前解析您的代码,但我没有测试过这种方法。

这些信息可能是常识,但经过大量搜索后,我无法找到该问题的直接答案。我个人获取此信息的来源是反复试验。如果有人有任何其他信息概述了如何在执行的 PowerShell 脚本中访问系统甚至配置参数,请在下面发布,我会更新这个答案。

于 2019-07-09T14:06:59.360 回答