分支过滤器
如果一个 VCS root 设定了 特定的分支 ,则在 TeamCity 的各种操作中, 分支筛选 选项将变得可用。
分支过滤器的使用
目前,分支过滤器可以在以下 TeamCity 设置页面上进行配置:
设置 | 分支过滤器说明 |
|---|---|
版本控制设置的构建配置 | 限制构建配置中可用的分支集。 此分支筛选器在应用任何其他分支筛选器之前应用,并限制在自定义构建对话框中显示的分支,以及触发器和构建功能可见的分支。 |
限制依赖构建,其产物将在当前配置的构建中使用,只限于在匹配分支中的构建。 | |
限制此完成构建触发器将监视的分支集。 | |
限制可以由此 VCS 触发器触发构建的分支集。 | |
限制应用触发器的分支集。
| |
设置一个分支过滤器,只在符合指定条件的分支中重新运行失败的构建。 | |
VCS 标记 构建功能 | 将标签应用的构建所在的分支集合进行限制。 |
自动合并 构建功能 | 限制将要合并构建源的分支集。 |
设置过滤器,只接收来自指定分支的构建的警报。 默认情况下,只有默认分支会被监控。 | |
Pull Requests 构建功能 | 指定在哪些分支上进行监视并触发拉取请求。 此功能的过滤器应引用分支的完全限定 VCS 名称( |
指定一个命名模式,清理规则将适用于此模式的分支。 请注意,根据 "Apply rule" 的设置,它可能会应用于每个匹配分支的选定构建数量,也可能会应用于一组匹配分支的选定构建数量。 |
如果在单个根目录上配置了多个分支过滤器,将应用以下优先级顺序:
VCS 根设置中的 branch specification 定义了初始的受监视分支集。
如果已指定,构建配置的 版本控制设置 中的分支过滤器可以缩小初始分支集的范围。
如果指定,构建触发器设置中的分支筛选器应用于筛选器声明的子集(2)。
分支过滤器格式
要过滤分支,请使用以换行符分隔的 +|-:logical_branch_name 规则列表,其中 logical_branch_name 是在 TeamCity UI 中显示的名称(例如, master)。 名称区分大小写。
+: 规则将匹配的分支包含在接受分支的列表中, -: 规则则将分支从列表中排除。
每条规则可以有一个可选的通配符 * 占位符,用于匹配一个或多个字符: +|-:名称* 将匹配分支 name1 ,但 不会 匹配分支 名称 ,这需要显式添加。
您可以在分支过滤器中使用参数引用。
当单个分支被分支过滤器的多行匹配时,适用最具体(由模式匹配的字符最少)的最后一条规则。 也就是说,如果过滤器包含一个与分支完全匹配的模式(即,一个没有 * 通配符的模式),那么将使用最后一个这样的模式。
其他示例:
仅接受默认分支:
+:<default>除默认分支外,所有分支都被接受:
+:* -:<default>只接受带有
功能-前缀的分支:+:feature-*空的分支过滤器(接受所有分支):
+:*
拉取请求分支过滤器
使用 +|-pr: <parameter1>=<value1> <parameter2>=<value2> ... 语法创建针对特定拉取(合并)请求分支的过滤器。 这种通用语法允许您定义与 VCS 无关的细粒度过滤表达式,考虑比逻辑分支名称更具体的参数。
<parameter>=<value> 表达式使用逻辑 和 运算符组合,这意味着拉取(合并)请求分支必须满足所有条件才能通过过滤器。 目前支持以下参数和值:
target和source—允许您按其传入和传出分支过滤请求。source参数始终为false,如果请求源自分叉的存储库。 支持的值:带有可选 通配符的逻辑分支名称。sourceRepo—允许您仅针对来自同一存储库的拉取请求(例如,将一个存储库分支合并到另一个分支),来自分叉存储库的请求,或两者。 支持的值:same、fork、any。draft—指定是否接受草稿拉取请求。 此参数仅对 GitHub 和 GitLab 生效。 支持的值:true接受标记为草稿的 仅剩 请求;false接受非草稿的 仅剩 请求。
github_role—允许您按发送者角色(相对于存储库组织)过滤拉取(合并)请求。 支持的值:collaborator、contributor、member、owner、none(不区分大小写)。
设置分支过滤器时,点击魔术棒按钮并切换到 拉取请求条件 选项卡,以使用可视化编辑器添加过滤表达式。

通配符和模式
使用星号("*")作为任何字符串的通配符。 例如, +pr:* 和 -pr:* 规则允许触发器接受或忽略所有传入请求。
以下规则仅允许对象接受目标分支以 "dev/" 开头的请求:
筛选器优先级
拉取请求筛选表达式的应用方式与常规 +|-:<branch_name> 表达式相同:从第一个开始逐一应用。 这意味着在表达式冲突的情况下,最后一个具有最高优先级。 例如,以下规则集允许其父对象接受所有可用的分支,然后排除所有拉取请求分支,最后重新启用由组织成员授权的拉取请求。
以下组合过滤器拒绝来自分叉仓库的拉取请求,即使它们针对的是 主要 分支(因为 sourceRepo 条件是最后出现的)。
示例
以下的 Kotlin DSL 样例展示了如何结合 VCS 和 Schedule 触发器来实现以下设置:
一旦 TeamCity 检测到现有分支中的更改,就会立即构建;
由组织成员编写的非草稿拉取(合并)请求将在 TeamCity 收集到它们的信息后立即构建;
来自合作伙伴和贡献者的非草稿拉取(合并)请求,如果这些请求针对两个稳定仓库分支之一,将在凌晨3:00进行夜间构建。