TeamCity Kotlin DSL:如何从外部 powershell 脚本访问代理配置参数

TeamCity Kotlin DSL: how to access agent configuration parameters from an external powershell script

我在 kotlin 中定义了一个构建步骤,它从这样的路径加载 powershell 脚本:

powerShell { 
    scriptMode = file { 
        path = "path\to\file.ps1"
    }
}

文件已成功加载 运行,但问题是脚本需要引用代理配置参数,如 MSBuildTools15.0_x64_Path。如果我使用内联脚本,将通过 %MSBuildTools15.0_x64_Path% 访问该参数。

有没有办法访问这些变量而不必将它们声明为环境?我知道如果那是在环境上下文中只会在脚本中调用 ${env:MSBuildTools15.0_x64_Path},但如果有正确的方法,我宁愿不重新声明相同的东西。

postanote所述,问题在于范围。代理变量对脚本不可见,因为它在闭包范围内运行。这意味着您必须明确地将变量发送给它。我是如何做到的是在 powershell 脚本的开头定义一个 param,正如您通常希望的那样:

param ([string] $MSBuildPath)

然后,在步骤的定义中,哪个范围可以访问变量,将其作为参数发送,如下所示:

powerShell {
    formatStderrAsError = true
    scriptMode = file {
        path = "path\to\file.ps1"
    }
    param("jetbrains_powershell_scriptArguments", """-MSBuildPath "%MSBuildTools15.0_x86_Path%"""")
}

我试过在没有命名参数的情况下使用 args[0],但是如果不尝试错误你真的不知道参数的位置,因为 TeamCity 添加了一堆其他参数。