【问题标题】:Unable to do any String manipulate operation in Teamcity Config Parameter values无法在 Teamcity Config 参数值中执行任何字符串操作操作
【发布时间】:2022-01-04 19:30:23
【问题描述】:

我的 settings.kts 中有一个配置参数

select(
            name = "TEST_TYPE",
            value = "",
            label = "TEST_TYPE",
            description = "Type of Test(s)",
            display = ParameterDisplay.PROMPT,
            readOnly = false,
            allowMultiple = false,
            options = listOf("E2E-TESTS", "API-TESTS")
        )

当我尝试访问它时,它会返回我选择的正确选项。

steps {
 script {
            scriptContent = "echo %TEST_TYPE%"
        }
}

prints -> E2E-TESTS

但是当我尝试修改/操作值时,它实际上返回标签而不是我选择的选项。

script {
            var test = "%TEST_TYPE%".length
            scriptContent = "echo $test"
        }

prints -> 11,因为 %TEST_TYPE% 中有 11 个字符。

我什至不能执行任何条件操作。

我不知道为什么。这很奇怪,完全被这个阻止了。任何帮助都会很方便。

【问题讨论】:

    标签: kotlin teamcity


    【解决方案1】:

    我相信参数只在预定义的 DSL 属性中被替换为它们的值,而不是任何 String 局部变量。 因此,首先在 Kotlin 中评估 scriptContent 字符串,然后(在幕后)替换参数,然后将生成的脚本发送到命令行中执行。

    如果您需要评估参数值的长度,您需要通过命令行脚本来完成,而不是 Kotlin。

    对于 Linux bash,应该是简单的 scriptContent = "echo #%TEST_TYPE%"(也有 other ways 来做) 对于 Windows Batch,它是 much trickier(因为没有内置的方法),所以您最好使用 Powershell 进行此构建步骤:content = "Write-Host %TEST_TYPE%.Length"

    另一种选择是使用Context Parameters 而不是配置参数,该值可以通过DslContext.getParameter("TEST_TYPE") 从 Kotlin 访问,但它们是在项目级别定义的,并且未显示在 Run Custom Build 对话框。

    【讨论】:

    • 查找长度只是一个例子。我最终想与 TEST_TYPE 参数选项进行简单的字符串比较,如下所示 val testType = "%TEST_TYPE%" ``` if (testType.contains("E2E-TESTS")) { return "e2e-tests/build.gradle " } else if (testType.contains("API-TESTS")) { return "api-tests/build.gradle" } ```
    • 那么,您有一个 Gradle 构建步骤,而不是命令行?如果它不需要连接以外的任何东西,buildFile = "%TEST_TYPE%/build.gradle" 应该可以正常工作。另一种选择是将这些 Gradle 构建脚本合并为一个具有不同测试类型的专用任务:tasks = "%TEST_TYPE%"
    • 感谢您的建议。这将缓解我的问题。如果我能够对配置参数应用条件,那就太好了
    • 您可以将其作为 project propertygradleParams = "-PtestType=%TEST_TYPE%"task optiongradleParams = "--testType=%TEST_TYPE%" 从 TeamCity 传递到 Gradle,并在 Gradle 端定义所有条件逻辑
    猜你喜欢
    • 2013-05-07
    • 2017-06-23
    • 2021-12-04
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多