【问题标题】:TeamCity Kotlin DSL: how to access agent configuration parameters from an external powershell scriptTeamCity Kotlin DSL:如何从外部 powershell 脚本访问代理配置参数
【发布时间】:2020-05-07 01:38:59
【问题描述】:

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

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

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

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

【问题讨论】:

标签: powershell kotlin teamcity dsl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2014-12-08
    • 1970-01-01
    • 2017-12-09
    • 2022-01-14
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多