首页 > 解决方案 > TeamCity Kotlin DSL:如何从位于 DSL 文件夹中的文件运行 PowerShell 脚本

问题描述

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

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

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

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

标签: powershellkotlinteamcitydsl

解决方案


因此,根据文档,有一种方法可以读取.teamcity 文件夹中的文件。但是,这仅适用于 DSL 上下文。这将无法定义脚本路径,因为在运行该部分代码时,该代码不存在(我尝试过lsworkdir)。因此,您要做的就是明确签出该文件夹。为此,您必须定义结帐规则,例如:

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

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

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

推荐阅读