在TeamCity Kotlin DSL中使用相同的步骤预先安装多个BuildType

比方说,我有一个项目中的多个生成types:

object Project : Project ({ // .... buildType(foo) buildType(bar) buildType(baz) }) object foo() : BuildType ({ // .... steps { script { scriptContent = "echo foo" } } }) 

foo,bar和baz buildType在内部太不一样了,不能转换成单个类。

现在我有一个要求,不需要修改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 }