在 TeamCity Kotlin DSL 中使用相同的步骤添加多个 BuildType
Prepend multiple BuildTypes with the same steps in TeamCity Kotlin DSL
假设我在一个项目中有多个构建类型:
object Project : Project ({
// ....
buildType(foo)
buildType(bar)
buildType(baz)
})
object foo() : BuildType ({
// ....
steps {
script {
scriptContent = "echo foo"
}
}
})
foo、bar 和 baz buildTypes 内部差异太大,无法转换为单个 class。
现在我需要在不修改 foo、bar 或 baz 源代码的情况下,在步骤部分前面加上两个额外的步骤:
script {
scriptContent = "echo step 1"
}
script {
scriptContent = "echo step 2"
}
所以,当我开始构建 foo 时,它会输出:
step 1
step 2
foo
这样成功实现了:
object Project : Project ({
// ....
buildType(commonSteps(foo))
buildType(commonSteps(bar))
buildType(commonSteps(baz))
})
fun commonSteps(buildType: BuildType): BuildType {
val newSteps = arrayListOf(scriptStep("echo 123"), scriptStep("echo 321"))
buildType.steps.items.addAll(0, newSteps)
return buildType
}
fun scriptStep(scriptContent: String): ScriptBuildStep {
val step = ScriptBuildStep()
step.scriptContent = scriptContent
return step
}
假设我在一个项目中有多个构建类型:
object Project : Project ({
// ....
buildType(foo)
buildType(bar)
buildType(baz)
})
object foo() : BuildType ({
// ....
steps {
script {
scriptContent = "echo foo"
}
}
})
foo、bar 和 baz buildTypes 内部差异太大,无法转换为单个 class。
现在我需要在不修改 foo、bar 或 baz 源代码的情况下,在步骤部分前面加上两个额外的步骤:
script {
scriptContent = "echo step 1"
}
script {
scriptContent = "echo step 2"
}
所以,当我开始构建 foo 时,它会输出:
step 1
step 2
foo
这样成功实现了:
object Project : Project ({
// ....
buildType(commonSteps(foo))
buildType(commonSteps(bar))
buildType(commonSteps(baz))
})
fun commonSteps(buildType: BuildType): BuildType {
val newSteps = arrayListOf(scriptStep("echo 123"), scriptStep("echo 321"))
buildType.steps.items.addAll(0, newSteps)
return buildType
}
fun scriptStep(scriptContent: String): ScriptBuildStep {
val step = ScriptBuildStep()
step.scriptContent = scriptContent
return step
}