构建模板可以基于TeamCity上的另一个构建模板吗?

时间:2016-09-07 21:35:58

标签: teamcity

我正在使用TeamCity 9.0.2,我想让模板实现另一个模板,或者使构建配置实现多个模板。

这可以实现吗?

2 个答案:

答案 0 :(得分:3)

不幸的是,目前这是不可能的,但已经在TW-12153中已经请求了很长时间(也许你想投票)。

要在多个构建配置或构建配置模板之间共享多个构建步骤,我使用的是meta runners

  

Meta-Runner允许您从构建配置中提取构建步骤,需求和参数,并从中创建构建运行器。   然后,可以在任何其他构建配置或模板的构建步骤中将此构建运行器用作任何其他构建运行器。

虽然使用元运行器可以作为我们的解决方法,但编辑元运行程序并不像编辑构建配置模板那样方便(因为它通常需要手动编辑元运行程序定义XML文件)。

答案 1 :(得分:1)

当您提出问题时,这不可用,但自从Team City 10开始,您现在可以使用Kotlin来配置构建,从而配置模板。

通过此,您可以使模板实现其他模板。

我自己已经使模板继承自其他模板,以减少重新配置时间,而不必重复自己这么多次。

open class TheBaseTemplate(uuidIn: String, extIdIn: String, nameIn: String, additionalSettings: Template.() -> Unit) : Template({
    uuid = uuidIn
    extId = extIdIn
    name = nameIn
    /* all the other settings that are the same for the derived templates*/
    additionalSettings()
})

object DerivedTemplateA : TheBaseTemplate("myUuidA", "myExtIdA", "myNameA", {
    params {
        param("set this", "to this")
    }
})

object DerivedTemplateB : TheBaseTemplate("myUuidB", "myExtIdB", "myNameB", {
    params {
        param("set this", "to that")
    }
})

object Project : Project({
    uuid = "project uuid"
    extId = "project extid"
    name = "project name"

    buildType {
        template(DerivedTemplateA)
        /* the uuid, extId and name are set here */
    }

    buildType {
        template(DerivedTemplateB)
        /* the uuid, extId and name are set here */
    }

    template(DerivedTemplateA)
    template(DerivedTemplateB)
})

上面的代码可能很难理解。 需要一些时间来熟悉Kotlin,它的作用以及它与TeamCity的接口方式。我应该指出一些进口产品缺失。

此外,以少许盐为例。这是一个快速示例,演示了实现其他模板的模板的一种方式。不要把这个例子作为做事的权威方式。