Build Configuration Template(构建配置模板)
构建配置模板允许您消除构建配置设置的重复。 如果您希望拥有几个相似(不一定是完全相同)的构建配置,并能够在一个地方修改它们的公共设置,而不必编辑每个配置,那就用这些设置创建一个构建配置模板。 修改模板设置会影响 全部 与此模板关联的构建配置。
在项目中,可以为该项目及其子项目中的所有构建配置定义一个默认模板。 下面的 部分 包含详细信息。
构建配置模板支持项目层次结构:一旦创建,可用的模板包括来自当前项目及其父项目的模板。 在复制项目或构建配置时,不属于目标项目或其任一父级项目的模板将被自动复制。 您只有在模板属于当前项目或其父项目之一时,才能将构建配置与模板关联。
有几种方法可以创建构建配置模板:
默认模板允许影响此项目及其子项目中的所有构建配置。
您可以通过项目管理的 一般设置 页面,将项目的所有构建配置与默认模板关联,方法是从 默认模板 下拉菜单中选择一个模板。 如果项目或其父项目中至少定义了一个模板,那么该选项便可用。 所有新的构建配置将继承默认模板的设置。
现有配置的设置将会被保留。
当定义时,除非在子项目中定义了其他默认模板,否则默认模板将影响此项目的所有构建配置和子项目。 使用默认模板,您可以轻松修改所有项目的构建配置,例如:
将特定构建功能添加至项目的所有构建配置中
将所有构建配置切换到某个特定的签出模式
提供一个默认的失败条件
项目配置模式可以适应默认模板。
XML:该
project-config.xml
文件包含<default-template ref="...." />
元素。DSL:项目配置包含
defaultTemplate = "..."
方法。 参见一个默认模板配置的样本项目配置:
object Project : Project({
uuid = "2b241ffb-9019-4e60-9a3a-d5475ab1f312"
extId = "ExampleProject"
parentId = "_Root"
name = "Example Project"
defaultTemplate = "ExampleProject_MyDefaultTemplate"
...
features {
...
}
...
})
您可以根据模板 创建新的构建配置。
您可以将任意数量的现有构建配置与模板关联/附加:可以从屏幕右上角的 操作 按钮中使用 附加到模板 选项。
当您将现有的构建配置与模板关联时,构建配置会继承模板中定义的 所有设置 ,如果存在冲突,模板设置将优先于构建配置的设置(依赖项、参数和需求除外)。 从模板中继承的设置 可以被覆盖。
您只有在模板属于当前项目或其父级项目之一时,才能将构建配置关联到模板。 至少有一个关联构建配置的模板无法删除,需要首先解除相关构建配置。
也可以将构建配置与多个模板关联。
一种构建配置可以通过 附加到模板 操作菜单附加到多个模板。 在 操作 菜单中, 管理模板 操作允许用户:
更改模板的顺序,这会影响重叠设置的优先级和构建步骤的顺序:优先级赋予列表中较高的模板的设置。 它影响的实体包括参数名称、设置 ID(用于构建步骤、触发器、功能、工件依赖关系和要求)、VCS 根或快照依赖源构建配置 ID,如果它们在附加到构建配置的模板之间有重叠。
将构建配置从一些模板中分离出来(用户标记要分离的模板,然后必须应用他们的更改)。
在同一对话框窗口中,使用同名按钮将构建配置从所有模板中分离。
您可以在 构建配置设置 页面上查看附加到构建配置的所有模板。
构建配置附加的所有模板的设置都会被继承,您可以在查看/编辑 构建配置设置 页面中查看它们的继承来源。
当构建配置与其部分模板脱离关联时,所有从这些模板继承的有效设置(即在配置中未被覆盖且未被某些更高优先级模板覆盖的设置)都将被复制到该配置中。 复制构建配置的逻辑与提取模板的逻辑相同。 在移动构建配置/项目时,逻辑会检查所有与构建配置关联的模板。
XML:如果构建配置附加到单一模板,那么产生的配置 XML 格式将保持和之前一样(
ref
元素的设置
属性)。 如果它附加到多个模板,则它们的引用会被存储在设置
节点下的一个独立元素中,如下所示:
<inherits>
<ref id="Template1_ExternalId" />
<ref id="Template2_ExternalId />
.....
</inherits>
DSL:Kotlin DSL 已扩展,因此在构建配置定义中,用户可以使用
模板(vararg)
方法,该方法接受外部 ID 或 DSL 模板实例(但不能混合使用,因此如果在同一配置中使用了 DSL 内部和外部定义的模板,则必须使用两者的外部 ID)。
较旧的模板(...)
方法和属性 无法 可以在同一构建类型定义中多次使用,以表明它继承自多个模板:按照早期实现,每次使用此方法时,它都会覆盖先前的模板外部 ID。 它是为了向后兼容而保留的。
当您使用 从模板分离 选项从 操作 菜单的 构建配置设置s 页面中 将构建配置从模板中分离时,模板中的所有设置将被复制到构建配置中并启用编辑。
请注意,如果构建配置附加到多个模板,则 从模板分离 选项将不可用——请改用 管理模板。
与模板关联的构建配置将继承其所有设置(在用户界面中标记为 继承)。 从关联的构建配置中不能删除继承的设置,但可以在其中禁用继承的构建步骤、触发器、构建功能、失败条件、构件依赖性和代理需求。
修改模板中的设置将影响 所有配置 与此模板关联的内容;但是,可以在关联的构建配置中重新定义大多数设置。
您几乎可以重新定义所有的构建配置设置(例如,构建步骤, 参数, 构建选项)。 唯一的例外是快照依赖项和签出规则 无法重新定义。
修改后的设置会用黄色边框突出显示,并且在修改后的设置右侧会出现 重置 按钮,允许您将更改恢复为模板的原始设置。
请注意,如果您在构建配置中重新定义了一个继承的参数,那么它将以继承的名称和新的值被保存。 如果您在模板中重命名此参数,那么在构建配置中将会有两个参数:一个保留原名称和重新定义的值,另一个是从模板中继承并重命名的。
除了如上所述的重新定义设置之外,您还可以通过参数引用来重新定义继承设置中的单个字段。
要引入配置参数参考,请在模板文本字段中使用 %\参数名称%
语法。 一旦引入,此参数将出现在构建配置模板的 参数 页面上,并标记为需要一个值。
您可以指定参数的默认值,也可以不给它设置任何值。 您可以在与模板关联的构建配置中定义参数的实际值。
参见 配置构建参数。
假设您有两个相似的构建配置,它们仅在签出规则上有所不同。 例如,第一种配置的签出规则应该包含 +:release_1_0 => .
,而第二种配置的则应该包含 +:trunk => .
。 所有其他设置均相等。 对于两种构建配置,如果有一个模板与之相关联将会很有用,但这意味着需要单独更改每个构建配置中的签出规则。
为此,请执行以下步骤:
从这些配置中提取一个模板。
在模板设置中,导航到 版本控制设置 ,打开 VCS 根的 签出规则 对话框,并在其中输入:
% \checkout.rules %
对于继承的构建配置,打开配置设置页面,并在 参数 页面上为
checkout.rules
配置参数指定实际值。对于第二个构建配置,请使用 与模板关联 选项从 操作 中选择模板。 在 "关联模板" 对话框中,为
checkout.rules
参数指定一个适当的值。 单击 关联。
因此,您将拥有两个具有不同签出规则的构建配置,但都关联到一个模板。
这样,您可以创建一个配置参数,然后从任何具有文本字段的构建配置中引用它。
有时需要在模板中定义一个通用的构建步骤,以便在所有构建配置步骤之前或之后执行此步骤。
对于给定的模板,可以定义这样的步骤,然后确定它们相对于构建配置步骤的位置。 所有构建配置步骤都在 重新排序构建步骤 对话框中以占位符形式表示。 模板步骤可以放置在此占位符的前方和/或后方。

如果需要,您仍可以自定义基于模板的构建配置中的构建步骤顺序:
使用 TeamCity 网络用户界面,您可以更改构建配置步骤相对于模板步骤的位置。
使用 版本设置 ,不仅可以更改构建配置步骤相对于模板步骤的位置,还可以重新排序模板本身的步骤。
如果您希望在项目中的所有构建配置上强制执行一些设置,以使其他用户无法重新定义它们,TeamCity为项目层次结构中的所有构建配置提供了这种能力。 例如,使用强制设置,可以在所有地方设置 agent side checkout ,或确保所有构建配置都有一些严格的 execution timeout。 目前,可以强制执行构建功能、选项和参数。 构建步骤和构建需求也可以被强制执行。
为了在项目层次结构中执行一些设置,创建一个包含这些设置的模板。 之后,系统管理员可以将此模板设置为项目中强制设置的模板:

强制设置的模板类似于默认模板,因为其所有设置都在项目层次结构的构建配置中继承。 不同之处在于,这些继承的设置不能被禁用或覆盖。
需要系统管理员角色才能将项目与特定的强制设置模板关联。 模板本身可以由能够管理定义了该模板的项目的项目管理员进行编辑。
如果在项目中指定了强制设置的模板,而在子项目中指定了不同的模板作为强制设置,那么子项目的模板将具有更高的优先级。
Thanks for your feedback!