TeamCity BranchFilter 导致默认分支被禁用的错误

问题描述 投票:0回答:2

使用 TeamCity 2020.2.4

构建作业有多个 VCS 根设置,由“源代码”和“实用脚本”组成。

“实用脚本”始终位于同一分支(主分支);但是,“源代码”要么位于 master(又名:默认)要么位于release/### 分支中。

“源代码”根有:

Default branch: refs/heads/master
Branch specification:
+:refs/heads/(master)
+:refs/heads/(release/*)

目前有 2 个版本,一个用于主版本(运行时间较长的版本),一个用于发布版本(执行一系列额外步骤来准备发布)。

最初希望隐藏显示的“master”默认分支,因此遵循 TeamCity 自己的文档(https://www.jetbrains.com/help/teamcity/branch-filter.html#Branch+Filter+Format )这意味着我可以调整分支过滤器:

+:*
-:<default>

(还有一些文章提到这个作为答案,但已经有很多年了)

但是这样做时,最终会出现错误:

Failed to collect changes, error: Builds in default branch are disabled in build configuration

看起来触发器运行得很好,但在手动构建中事情确实出现了问题。

甚至尝试过使用默认+提示参数覆盖

teamcity.build.branch
,但没有这样的运气。

见过将其包装在另一项工作中的情况,但是直接做 TC 所说的应该可能的事情有点hacky。

teamcity
2个回答
4
投票

找到了解决方案,在这里发布以帮助下一个人......

因此,尽管 TeamCity 在版本控制设置中提到了“分支过滤器”的“逻辑分支名称”,但实际上可以提供完整的分支名称。

因此可以使用“refs/heads/master”。这实际上似乎允许 VCS 根之一继续使用它的默认/主,同时允许第二个根的其他选项。

例如:

VCS 根 #1 配置:

Default: refs/heads/master
Spec: 
+:refs/heads/(master)
+:refs/heads/(release/*)

VCS 根 #1 配置:

Default: refs/heads/master
Spec: (empty)

当做不同的工作时,分支过滤器会这样设置:

“仅限大师”:

+:refs/heads/master
+:release/*
-:master

“仅发布”:

+:refs/heads/master
+:<default>
+:master

值得注意的是,尽管“master”是默认的,但仍然需要实际指定两者......第一遍可能看起来不直观,但它就是这样 - 并且它有效。


0
投票

我在 TeamCity v2023.11.4 中得到相同的行为。

“分支过滤器”字段必须包含完整的 git 路径,而不仅仅是逻辑分支名称:

如果您在 VCS 根中有此分支规范:

+:refs/heads/(mybranch)
  • 顺便说一句,此处的括号导致 TeamCity 构建参数具有“mybranch”而不是“refs/heads/mybranch”。如果您根据分支名称生成部署环境或 dns 字符串,这会很有用。

那么您必须在构建配置的版本控制设置中包含此分支过滤器:

+:mybranch
+:refs/heads/mybranch
© www.soinside.com 2019 - 2024. All rights reserved.