Расширение свойств базового класса Teamcity Kotlin Build

Я извлек свои сборки Teamcity как выходные данные Kotlin. Я хочу создать базовый класс, который определяет ряд общих шагов/настроек, но позволяет отдельным сборкам расширять эти свойства.

e.g.

open class BuildBase(init: BuildBase.() -> Unit) : BuildType({
    steps {
        powerShell {
            name = "Write First Message"
            id = "RUNNER_FirstMessage"
            scriptMode = script {
                content = """
                    Write-Host "First Message"
                """.trimIndent()
            }
        }
    }
})

object Mybuild : BuildBase({
    steps { // This would add a new step to the list, without wiping out the original step
        powerShell {
            name = "Write Last Message"
            id = "RUNNER_LastMessage"
            scriptMode = script {
                content = """
                    Write-Host "Last Message"
                """.trimIndent()
            }
        }
    }
})

В этом примере я хочу наследовать шаг от базового класса, но добавить дополнительные шаги, относящиеся к конкретной сборке. Кроме того, я хотел бы унаследовать базу disableSettings (если есть) и отключить другие шаги.

Это вообще возможно? если да, то как мне структурировать классы, чтобы включить его?


person Obsidian Phoenix    schedule 21.11.2019    source источник


Ответы (1)


Возможно, вы уже нашли решение, но вот как я решил бы вашу проблему.

Как и в графическом интерфейсе, TeamCity поддерживает шаблоны сборки. В вашем случае у вас будет следующий шаблон:

object MyBuildTemplate: Template({
  id("MyBuildTemplate")
  name = "My build template"

  steps {
    powerShell {
        name = "Write First Message"
        id = "RUNNER_FirstMessage"
        scriptMode = script {
            content = """
                Write-Host "First Message"
            """.trimIndent()
        }
    }
  }
})

Затем вы можете определить конфигурацию сборки, расширяющую этот шаблон:

object MyBuildConfig: BuildType({
  id("MyBuildConfig")
  name = "My build config"

  steps { // This would add a new step to the list, without wiping out the original step
    powerShell {
        name = "Write Last Message"
        id = "RUNNER_LastMessage"
        scriptMode = script {
            content = """
                Write-Host "Last Message"
            """.trimIndent()
        }
    }

    // afaik TeamCity would append the build config's steps to the template's steps but there is way to explicitly define the order of the steps:
    stepsOrder = arrayListOf("RUNNER_FirstMessage", "RUNNER_LastMessage")
  }
})

Таким образом, вы также сможете наследовать disableSettings из шаблона.

person Tobias W    schedule 06.08.2020