Подготовьте несколько BuildTypes с теми же шагами в TeamCity Kotlin DSL

Допустим, у меня есть несколько типов сборки в проекте:

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

foo, bar и baz buildTypes слишком различны внутри и не могут быть преобразованы в один класс.

Теперь у меня есть требование, чтобы добавить раздел шагов с двумя дополнительными шагами без изменения исходного кода 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 }