配置 VCS 触发器
每当 TeamCity 检测到配置的 VCS roots 中有新的更改时,VCS 触发器会自动启动新的构建,并在待处理的更改中显示该更改。 可以在构建配置中添加多个 VCS 触发器。
默认设置的新 VCS 触发器在构建配置中有待处理的更改时触发构建:根据 VCS 根的 检查更改的间隔 对版本控制进行轮询,以便尊重配置的 VCS 提交挂钩。 仅显示与 检出规则匹配的更改作为待处理,因此触发器会处理这些更改。 如果在短时间内进行了多次提交并被 TeamCity 一起发现,则只有 将触发一个构建。
在检测到最后一次更改后,可以配置一个 安静期 ,在构建进入队列前等待一段没有更改的时间。
这两个选项的全局默认值为 60 秒,可以在 管理 | 全局设置 页面上为服务器配置。
warning
如果您有一个 构建链 (即通过 快照依赖性相互连接的一系列构建),触发器应配置在链中的最终构建中。 这就是下图中的 pack setup。
VCS 构建触发器还有另一个 选项 ,可以改变构建链的触发行为。 启用此选项后,即使在依赖项中检测到更改,而不是在最终构建中,整个构建链也将被触发。
让我们从示例中取出一个构建链: pack 设置
—— 依赖于 ——测试
—— 依赖于 ——编译
。

在 pack 设置
配置中设置了 VCS 触发器后,当 TeamCity 检测到在 pack 设置
中的变更时,整个构建链通常会被触发;在 编译
中的变更只会触发 编译
,而不会触发整个链条。 如果您希望在 编译
中的 VCS 更改触发整个链,将带有 "在快照依赖中的更改上触发" 选项 的 VCS 触发器添加到链的最终构建配置 pack 设置
。 这不会改变构建执行的顺序,但只有在任何快照依赖项发生变化时,才会触发整个构建链。 在此设置中, 编译
或 测试
构建配置不需要 VCS 触发器。
如果指定了触发规则(下面详述),则这些规则将适用于所有的更改(包括来自快照依赖的更改),只有符合规则的更改才会触发构建链。
请参阅 构建依赖项 页面上的详细信息。
当此选项 非 启用时,不同提交者可以进行多次提交;一旦被检测到,TeamCity 将只向队列中添加一个构建,其中包含所有这些更改。
如果您有快速构建和足够的构建代理,您可以让 TeamCity 启动一个新的构建 对于每次提交 ,确保没有其他更改进入同一个构建。
为此,请选择 在每次提交时触发构建 选项。 如果您选择 如果多个提交来自同一提交者,则将它们包含在一个构建中 选项,并且 TeamCity 检测到许多待处理的更改,它将按用户对其进行分组,并启动仅包含单个用户更改的构建。
这有助于找出是谁的更改导致构建失败或引发新的测试失败,如果出现这样的问题的话。
通过指定静默期,您可以确保构建不会在由多个 VCS 提交组成的非原子提交中途触发。
静默期 是 TeamCity 在检测到最后一次 VCS 更改和将构建添加到队列之间保持的时间段(以秒为单位)。 如果在此期间在 Build Configuration 中检测到新的 VCS 更改,该期间将从新的更改检测时间重新开始。 只有在静默期内未检测到新的 VCS 变更时,构建才会被添加到队列中。
请注意,实际的静默期不会少于构建配置的 VCS 根目录中最长的 检查更改间隔 ,因为 TeamCity 必须确保在静默期间至少收集一次更改。
静默期可以设置为默认值(60 秒,可在 管理 | 全局设置 页面上全局更改)或为构建配置设置自定义值。
note
请注意,当构建由设置了VCS静默期的触发器触发时,构建会被置于队列中,并使用固定的VCS修订版。 这确保了构建将只包含指定的更改而启动。 在某些情况下,此构建可能在后期变成一个 历史构建。
默认情况下,TeamCity 优化构建队列 :已排队的构建可以被已开始的构建或更近期的排队构建所替换。 您可以通过取消勾选相应的框来禁用此默认行为。
如果未指定触发规则,那么一旦检测到构建配置的任何更改,就会触发构建。 您可以通过更改 VCS 根设置并指定 checkout rules 来控制检测到的更改。
tip
观看我们的 视频指南 ,了解 签出规则和触发规则之间的区别。
为限制触发构建的更改,请使用 VCS 触发规则。 您可以在文本区域中手动添加这些规则(每行一个),或者使用 添加新规则 按钮生成它们(如有必要,请向下滚动以显示按钮)。

每条规则要么是"包含"(以 +
开始),要么是"排除"(以 -
开始)。
单个规则的一般语法是:
+|-[:[user=VCS_username;][root=VCS_root_id;][comment=VCS_comment_regexp]]:Ant_like_wildcard
tip
这里, pipe符号
|
表示 或 命令,如正则表达式中:使用+
包含,使用 或-
排除。
where:
Ant_like_wildcard
:用来匹配已更改文件路径的 通配符。 仅支持*
和**
模式,不支持?
模式 非。 规则中的文件路径可以是相对路径(不以/
或\
开头),以匹配代理上的结果路径,或者是绝对路径(以/
开头),以匹配相对于 VCS 根的 VCS 路径。 对于更改中的每个文件,都会找到最具体的规则(匹配最长文件路径的规则)。 如果有至少一个文件与“include”规则匹配,或者文件没有与“exclude”规则匹配,那么将触发构建。VCS_username
:如果指定,将规则限制为只适用于由具有相应的 VCS 用户名 的用户所做的更改。VCS_root_id
:如果指定了,该规则将仅限于对应的 VCS 根目录的更改。VCS_comment_regexp
:如果指定,则只限于在 VCS 注释中包含指定文本的更改。 请使用 Java 正则表达式 模式匹配注释中的文本(请参见下面的示例)。 如果注释文本包含匹配的文本部分,该规则则匹配;要匹配整个文本,请包含^
和$
特殊字符。
tip
在指定规则时,请注意,只要您输入任何
+
规则,TeamCity 就会将隐式默认值从 “包含全部” 更改为 “排除全部”。
要包含所有文件,请使用+:.
规则。另外,规则是依据路径特异性进行排序的。 如果您对
/some/path
有明确的包含规则,并对所有路径有-:user=some_user:.
排除规则,则对/some/path
的提交来自some_user
将会 已包含 ,除非您同时为该用户和该路径添加特定的排除规则,例如-:user=some_user:/some/path/**
。
示例 | 描述 |
---|---|
+:. | 包含所有文件 |
-:**.html | 排除所有 |
-":user=techwriter;root=InternalSVN:/misc/doc/*.xml | 排除由 |
-:lib/** | 阻止由于对构建源代码的 |
-:comment=minor:** | 如果更改检查包含注释中的单词 |
-:comment=^oops$:** | 如果注释仅由 |
+":comment=#teamcity:** | 如果评论包含 |
+":comment=(?s)#teamcity.*#major:** | 如果评论中同时包含了 例如,以下的注释将会触发构建:
|
在 Branch Filter 中阅读更多内容。
触发规则和分支过滤器由 和 组合,这意味着构建被 仅当满足两个条件时 触发。
例如,如果您在触发规则字段中指定了评论文本,并提供了分支规格说明,那么只有当提交包含特殊文本,并且符合分支筛选器的分支时,才会触发构建。
VCS 触发器完全了解分支,并且一旦在分支中检测到检入,就会触发构建。
当从一个分支合并 / 快速前进到另一个分支时,严格来说代码中实际上没有任何变化。 默认情况下,VCS 触发器的行为如下:
当合并/快速向前的两个非默认分支时:构建中的更改会根据同一分支中的先前构建进行计算,所以如果在不同的分支中有相同的提交构建,触发器会在指向同一提交的另一分支中启动构建。
如果默认分支是合并/快速向前的分支之一,更改始终依据默认分支计算,如果在默认分支中有相同修订的构建,那么 TeamCity 将不会在同一修订上运行新的构建。
触发器设置的 构建自定义 选项卡允许配置由此触发器启动的构建的自定义参数。 与 Run Custom Build 对话框类似,它让您可以覆盖 构建参数 的值,并选择是否在构建前清理 检出目录。
在此选项卡中,您可以自定义当前 构建配置中使用的任何 参数的值。 或者,您可以添加一个新的参数,它将仅在由此触发器启动的构建中可用。 如果当前构建对其他构建有 快照依赖 ,这样一个参数也可以用来 覆盖依赖构建配置的某个属性 :使用这个 reverse.dep.<dependencyBuildID>.<property>
语法。
tip
如果您将此功能与 build step execution conditions 结合使用,效果会更好。 您只需向步骤添加一个基于参数的条件,然后配置两个触发器:一个将运行包含此步骤的构建(条件满足时),另一个则会运行不包含此步骤的构建。 一种常见的用例是在常规构建中运行有限的测试,但在夜间构建中,当服务器负载最低时,运行完整的测试集。
请注意,如果您在触发器中重新定义了构建参数,然后在 参数 中删除了原始参数,其重新定义的值将被转换为触发器自己的纯文本参数。 在定制安全值时,这一点至关重要,因为只有与 "Password" 类型 一起存储时,它们才会被隐藏,如果转化为纯文本,它们将变得可读。
TeamCity 允许以多种方式解决类似的任务,在某些情况下,仍然优先创建不同的构建配置。 例如,如果在同一配置中有太多自定义运行,那么 TeamCity 预测每次构建的确切持续时间可能会更加困难。 如果您需要触发带有大量不同参数的构建,我们建议您创建一个 构建配置模板 ,并将其用作各种配置的蓝图,每种配置都有其自己的参数。