TeamCity On-Premises 2024.03 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:*-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 } } } })
最后修改日期: 16日 7月 2024年