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 添加了一堆其他参数。
我在 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 添加了一堆其他参数。