TeamCity On-Premises 2025.07 Help

分支过滤器

如果一个 VCS root 设定了 特定的分支 ,则在 TeamCity 的各种操作中, 分支筛选 选项将变得可用。

分支过滤器的使用

目前,分支过滤器可以在以下 TeamCity 设置页面上进行配置:

设置

分支过滤器说明

版本控制设置的构建配置

限制构建配置中可用的分支集。 此分支筛选器在应用任何其他分支筛选器之前应用,并限制在自定义构建对话框中显示的分支,以及触发器和构建功能可见的分支。

工件依赖

限制依赖构建,其产物将在当前配置的构建中使用,只限于在匹配分支中的构建。

完成构建触发器

限制此完成构建触发器将监视的分支集。

VCS 触发器

限制可以由此 VCS 触发器触发构建的分支集。

计划触发器

限制应用触发器的分支集。

  • 如果 "仅在有待处理更改时触发构建" 已开启,则触发器将在所有存在待处理更改的匹配分支处添加一个构建到队列中。

  • 如果 "仅在存在待处理更改时触发构建" 被关闭,则触发器将为所有匹配的分支添加一个构建到队列中,无论那里是否存在待处理的更改。

重试构建触发器

设置一个分支过滤器,只在符合指定条件的分支中重新运行失败的构建。

VCS 标记 构建功能

将标签应用的构建所在的分支集合进行限制。

自动合并 构建功能

限制将要合并构建源的分支集。

通知规则 以及 通知 构建功能

设置过滤器,只接收来自指定分支的构建的警报。 默认情况下,只有默认分支会被监控。

Pull Requests 构建功能

指定在哪些分支上进行监视并触发拉取请求。

此功能的过滤器应引用分支的完全限定 VCS 名称(refs/heads/branch-* ),而不是简化的逻辑名称(分支-*)。

保留清理规则

指定一个命名模式,清理规则将适用于此模式的分支。 请注意,根据 "Apply rule" 的设置,它可能会应用于每个匹配分支的选定构建数量,也可能会应用于一组匹配分支的选定构建数量。

如果在单个根目录上配置了多个分支过滤器,将应用以下优先级顺序:

  1. VCS 根设置中的 branch specification 定义了初始的受监视分支集。

  2. 如果已指定,构建配置的 版本控制设置 中的分支过滤器可以缩小初始分支集的范围。

  3. 如果指定,构建触发器设置中的分支筛选器应用于筛选器声明的子集(2)。

分支过滤器格式

要过滤分支,请使用以换行符分隔的 +|-:logical_branch_name 规则列表,其中 logical_branch_name 是在 TeamCity UI 中显示的名称(例如, master)。 名称区分大小写。

+: 规则将匹配的分支包含在接受分支的列表中, -: 规则则将分支从列表中排除。

每条规则可以有一个可选的通配符 * 占位符,用于匹配一个或多个字符: +|-:名称* 将匹配分支 name1 ,但 不会 匹配分支 名称 ,这需要显式添加。

您可以在分支过滤器中使用参数引用。

当单个分支被分支过滤器的多行匹配时,适用最具体(由模式匹配的字符最少)的最后一条规则。 也就是说,如果过滤器包含一个与分支完全匹配的模式(即,一个没有 * 通配符的模式),那么将使用最后一个这样的模式。

其他示例:

  • 仅接受默认分支:

    +:<default>
  • 除默认分支外,所有分支都被接受:

    +:* -:<default>
  • 只接受带有 功能- 前缀的分支:

    +:feature-*
  • 空的分支过滤器(接受所有分支):

    +:*

拉取请求分支过滤器

使用 +|-pr: <parameter1>=<value1> <parameter2>=<value2> ... 语法创建针对特定拉取(合并)请求分支的过滤器。 这种通用语法允许您定义与 VCS 无关的细粒度过滤表达式,考虑比逻辑分支名称更具体的参数。

<parameter>=<value> 表达式使用逻辑 运算符组合,这意味着拉取(合并)请求分支必须满足所有条件才能通过过滤器。 目前支持以下参数和值:

  • targetsource—允许您按其传入和传出分支过滤请求。 source 参数始终为 false ,如果请求源自分叉的存储库。 支持的值:带有可选 通配符的逻辑分支名称。

  • sourceRepo—允许您仅针对来自同一存储库的拉取请求(例如,将一个存储库分支合并到另一个分支),来自分叉存储库的请求,或两者。 支持的值: sameforkany

  • draft—指定是否接受草稿拉取请求。 此参数仅对 GitHub 和 GitLab 生效。 支持的值: true 接受标记为草稿的 仅剩 请求; false 接受非草稿的 仅剩 请求。

  • github_role—允许您按发送者角色(相对于存储库组织)过滤拉取(合并)请求。 支持的值: collaboratorcontributormemberownernone (不区分大小写)。

设置分支过滤器时,点击魔术棒按钮并切换到 拉取请求条件 选项卡,以使用可视化编辑器添加过滤表达式。

过滤表达式编辑器

通配符和模式

使用星号("*")作为任何字符串的通配符。 例如, +pr:*-pr:* 规则允许触发器接受或忽略所有传入请求。

以下规则仅允许对象接受目标分支以 "dev/" 开头的请求:

+pr:target=dev/*

筛选器优先级

拉取请求筛选表达式的应用方式与常规 +|-:<branch_name> 表达式相同:从第一个开始逐一应用。 这意味着在表达式冲突的情况下,最后一个具有最高优先级。 例如,以下规则集允许其父对象接受所有可用的分支,然后排除所有拉取请求分支,最后重新启用由组织成员授权的拉取请求。

+:* -pr:* +pr:github_role=member

以下组合过滤器拒绝来自分叉仓库的拉取请求,即使它们针对的是 主要 分支(因为 sourceRepo 条件是最后出现的)。

+pr:target=main -pr:sourceRepo=fork

示例

以下的 Kotlin DSL 样例展示了如何结合 VCSSchedule 触发器来实现以下设置:

  • 一旦 TeamCity 检测到现有分支中的更改,就会立即构建;

  • 由组织成员编写的非草稿拉取(合并)请求将在 TeamCity 收集到它们的信息后立即构建;

  • 来自合作伙伴和贡献者的非草稿拉取(合并)请求,如果这些请求针对两个稳定仓库分支之一,将在凌晨3:00进行夜间构建。

object Build : BuildType({ triggers { vcs { branchFilter = """ +:* -pr:* +pr: draft=false github_role=MEMBER """.trimIndent() } schedule { schedulingPolicy = daily { hour = 3 } branchFilter = """ +pr: draft=false github_role=COLLABORATOR target=main +pr: draft=false github_role=COLLABORATOR target=development +pr: draft=false github_role=CONTRIBUTOR target=main +pr: draft=false github_role=CONTRIBUTOR target=development """.trimIndent() triggerBuild = always() } } features { pullRequests { vcsRootExtId = "${MyRoot.id}" provider = github { authType = vcsRoot() filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY } } } })
最后修改日期: 2025年 9月 3日