TeamCity Kotlin DSL:如何从位于 DSL 文件夹中的文件 运行 PowerShell 脚本

TeamCity Kotlin DSL: how to run a PowerShell script from file located in the DSL folder

我在一个存储库中定义了一个构建配置,它在其他存储库中构建项目。 有些步骤是 powershell,目前,我在 Kotlin 文件本身中编写了所有逻辑,但它有点难以阅读和维护。 我认为如果将 .ps1 文件分开,使用此脚本会更容易。我知道如果您提供如下路径,文件中有 运行 脚本的选项:

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

问题是,当第 运行 步时,它说找不到它们所在的 .teamcity 文件夹。我无法将它们添加到其他存储库,因为几个项目需要一些脚本。

是否可以从该步骤访问该文件夹,还是我应该继续使用混乱的内联脚本?

所以,根据文档,有一种方法可以读取文件 within the .teamcity folder. However, that is only in the DSL context. That won't work to define a script path because at the time that portion of code is run, that code doesn't exists (i tried ls workdir). So what you have to do is to explicitly checkout the folder. To do that, you have to define checkout rules,例如:

vcs {
    root(VCS)
    root(DslContext.settingsRoot, "+:.teamcity/scripts => tcscripts", "+:Configurations => configurations")
    cleanCheckout = true
}

这将检出工作目录根目录中名为 tscripts 的文件夹中 .teamcity 中的脚本文件夹。您当然可以更改目录并添加更多规则。之后,您将可以按照以下步骤调用它们:

powerShell {
    formatStderrAsError = true
    scriptMode = file {
        path = "tcscripts/your_script.ps1"
    }
}