TeamCity On-Premises 2024.03 Help

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 {         ...     }     ... })

将构建配置与模板关联

  • 您可以根据模板创建新的构建配置

  • 您可以将任意数量的现有构建配置关联/附加到模板:屏幕右上角的 操作 按钮中提供了 附加到模板 选项。

当您将现有的构建配置与模板关联时,构建配置将继承模板中定义的 所有设置,如果出现冲突,模板设置将优先于构建配置的设置(除依赖性、参数和需求外)。 从模板中继承的设置 可以被覆盖

您只有在模板属于当前项目或其父级项目之一时,才能将构建配置关联到模板。 至少有一个关联构建配置的模板无法删除,需要首先解除相关构建配置。

也可以将构建配置与多个模板关联。

将构建配置与多个模板关联

一种构建配置可以通过 附加到模板 操作菜单附加到多个模板。 在 Actions 菜单中,Manage templates 功能允许用户:

  • 更改模板的顺序,这会影响重叠设置的优先级和构建步骤的顺序:优先级赋予列表中较高的模板的设置。 它影响的实体包括参数名称、设置 ID(用于构建步骤、触发器、功能、工件依赖关系和要求)、VCS 根或快照依赖源构建配置 ID,如果它们在附加到构建配置的模板之间有重叠。

  • 将构建配置从一些模板中分离出来(用户标记要分离的模板,然后必须应用他们的更改)。

  • 在同一对话框窗口中,使用同名按钮将构建配置从所有模板中分离。

您可以在 构建配置设置 页面查看附加到某个构建配置的所有模板。

所有附加到构建配置的模板的设置都会被继承,您可以在查看/编辑 Build Configuration Settings (构建配置设置)页面中查看它们从何处被继承。

当构建配置与其部分模板脱离关联时,所有从这些模板继承的有效设置(即在配置中未被覆盖且未被某些更高优先级模板覆盖的设置)都将被复制到该配置中。 复制构建配置的逻辑与提取模板的逻辑相同。 在移动构建配置/项目时,逻辑会检查所有与构建配置关联的模板。

  • XML:如果构建配置附加到单一模板,那么产生的配置 XML 格式将保持和之前一样( ref 元素的 设置 属性)。 如果它附加到多个模板,则它们的引用会被存储在 设置 节点下的一个独立元素中,如下所示:

<inherits> <ref id="Template1_ExternalId" /> <ref id="Template2_ExternalId /> ..... </inherits>
  • DSL:Kotlin DSL 已经进行了扩展,因此在构建配置定义中,用户可以使用 模板(vararg) 方法接受要么是外部 IDs ,要么是 DSL 模板实例(但是不能混合使用,所以如果在同一配置中使用了定义在 DSL 内部和外部的模板,两者的外部 IDs 都必须使用)。
    较老的 模板(...) 方法和 cannot 属性不能在同一构建类型定义中多次使用以表示它从多个模板中继承:按照先前的实现方式,每次使用此方法,它都会覆盖之前的模板外部 ID。 它是为了向后兼容而保留的。

从模板中分离构建配置

当您在 构建配置设置 页面的 操作 菜单中使用 从模板中分离 选项 从模板中分离构建配置 时,所有来自模板的设置将被复制到构建配置中并可用于编辑。
请注意,如果一个构建配置附加到多个模板,从模板中分离 选项将变得无法使用 —— 请改用 管理模板

重定义从模板继承的设置

与模板关联的构建配置将继承其所有设置(在用户界面中标记为 继承)。 从关联的构建配置中不能删除继承的设置,但可以在其中禁用继承的构建步骤、触发器、构建功能、失败条件、构件依赖性和代理需求。

在模板中修改设置将影响与此模板关联的 所有配置;然而,可以在相关联的构建配置中重新定义大多数设置。

您几乎可以重新定义所有的构建配置设置(例如,构建步骤,参数构建选项)。 唯一的例外是快照依赖和签出规则,这些无法被重新定义

修改过的设置会用黄色边框进行标注,而且在修改的设置右边会出现一个 Reset 按钮,让您能够还原这些变更为模板的原始设置。

请注意,如果您在构建配置中重新定义了一个继承的参数,那么它将以继承的名称和新的值被保存。 如果您在模板中重命名此参数,那么在构建配置中将会有两个参数:一个保留原名称和重新定义的值,另一个是从模板中继承并重命名的。

使用参数引用

除了如上所述的重新定义设置之外,您还可以通过参数引用来重新定义继承设置中的单个字段。

要引入配置参数参考,请在模板文本字段中使用 %\参数名称% 语法。 一旦引入,此参数将出现在标记为需要值的构建配置模板的 参数 页面上。

您可以指定参数的默认值,也可以不给它设置任何值。 您可以在与模板关联的构建配置中定义参数的实际值。

参见 配置构建参数

配置参数使用示例

假设您有两个相似的构建配置,它们仅在签出规则上有所不同。 例如,第一种配置的签出规则应该包含 +:release_1_0 => . ,而第二种配置的则应该包含 +:trunk => .。 所有其他设置均相等。 对于两种构建配置,如果有一个模板与之相关联将会很有用,但这意味着需要单独更改每个构建配置中的签出规则。

为此,请执行以下步骤:

  1. 从这些配置中提取一个模板。

  2. 在模板设置中,导航至 版本控制设置,打开 VCS 根的 签出规则 对话框,并在此处输入: % \checkout.rules %

  3. 对于继承的构建配置,请打开配置设置页面,在 参数 页面上指定 checkout.rules 配置参数的实际值。

  4. 对于第二个构建配置,从 Actions (操作)中使用 Associate with template(关联模板)选项,并选择模板。 在 "关联模板" 对话框中,为 checkout.rules 参数指定一个适当的值。 点击 关联

因此,您将拥有两个具有不同签出规则的构建配置,但都关联到一个模板。

这样,您可以创建一个配置参数,然后从任何具有文本字段的构建配置中引用它。

在模板中具有前置步骤和后置步骤的能力

有时需要在模板中定义一个通用的构建步骤,以便在所有构建配置步骤之前或之后执行此步骤。
对于给定的模板,可以定义这样的步骤,然后确定它们相对于构建配置步骤的位置。 所有构建配置步骤都在 重新排序构建步骤 对话框中以占位符形式表示。 模板步骤可以放置在此占位符的前方和/或后方。

重排构建步骤

如果需要,您仍可以自定义基于模板的构建配置中的构建步骤顺序:

  • 使用 TeamCity 网络用户界面,您可以更改构建配置步骤相对于模板步骤的位置。

  • 使用 版本设置,不仅可以更改构建配置步骤相对于模板步骤的位置,还可以重新排序模板本身的步骤。

强制执行从模板中继承的设置

如果您希望在项目中的所有构建配置上强制执行一些设置,以使其他用户无法重新定义它们,TeamCity为项目层次结构中的所有构建配置提供了这种能力。 例如,使用强制设置,可以在所有地方设置 agent side checkout ,或确保所有构建配置都有一些严格的 execution timeout。 目前,可以强制执行构建功能、选项和参数。 构建步骤和构建需求也可以被强制执行。

为了在项目层次结构中执行一些设置,创建一个包含这些设置的模板。 之后,系统管理员可以将此模板设置为项目中强制设置的模板:

强制设置模板

强制设置的模板类似于默认模板,因为其所有设置都在项目层次结构的构建配置中继承。 不同之处在于,这些继承的设置不能被禁用或覆盖。

需要系统管理员角色才能将项目与特定的强制设置模板关联。 模板本身可以由能够管理定义了该模板的项目的项目管理员进行编辑。

如果在项目中指定了强制设置的模板,而在子项目中指定了不同的模板作为强制设置,那么子项目的模板将具有更高的优先级。

最后修改日期: 16日 7月 2024年