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

标签 powershell teamcity teamcity-9.0 octopus

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

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

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

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

以下是我在PowerShell内置步骤中使用的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用户定义的参数(配置参数)。提前致谢。

最佳答案

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

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

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

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

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

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

关于powershell - 有什么办法可以使用PowerShell脚本读取TeamCity用户定义的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640332/

相关文章:

powershell - 与 Powershell 并行发出请求会导致 "You cannot call a method on a null-valued expression"

powershell - 如何在 Windows 10 上的 PowerShell 中创建文件硬链接(hard link)?

c - 如何在 Visual Studio Code 集成终端中接受用户输入?

api - 如何通过来自 TeamCity 构建的 API 列出更改?

build - 增量构建是否可以与持续集成相结合?

sql-server - TeamCity 9 SQL Server 安装超时

.net - 针对不同 .NET Framework 构建 TeamCity NuGet 包

powershell - 代理命令

teamcity - TeamCity 可以为新的 Git 分支/标签触发构建吗?

python - teamcity 的机器人框架插件