如何使用 Git 分支支持覆盖 TeamCity 7.1 中的 <default> 分支名称?

Posted

技术标签:

【中文标题】如何使用 Git 分支支持覆盖 TeamCity 7.1 中的 <default> 分支名称?【英文标题】:How can I override the <default> branch name in TeamCity 7.1 using Git branching support? 【发布时间】:2012-08-25 02:29:39 【问题描述】:

我有一个 CI 构建,它从 Github 提取功能分支并将它们构建/打包到本地文件夹中,使用基于项目、分支和内部版本号的文件夹命名约定。

对于命名分支(feature1、feature2),这非常有用。

问题在于,当我向 master 提交时,TeamCity 将 teamcity.build.branch 公开为 &lt;default&gt; - 这意味着当构建步骤扩展时

E:\Packages\MyProject\%teamcity.build.branch%\

它以 E:\Packages\MyProject\&lt;default&gt; 结尾 - 然后由于它不是有效的 Windows 路径而导致构建步骤崩溃。

可以在完全限定的构建参数中看到主分支名称:

teamcity.build.branch                         <default>
teamcity.build.checkoutDir                    C:\TeamCity\BuildAgents\agent-mulder\work\2151838a7933464d
teamcity.build.default.checkoutDir            2151838a7933464d
teamcity.build.id                             16347
teamcity.build.vcs.branch.github_myproject    refs/heads/master

但理想情况下,我需要将 ma​​ster 作为 teamcity.build.branch 用于我的构建步骤。

我可以在运行时转换参数吗?覆盖行为?我什至尝试将 VCS 分支名称设置为 DO_NOT_USE,希望“master”不再匹配默认值 - 但这似乎也不起作用。

【问题讨论】:

我为 TeamCity 的 YouTrack 项目添加了一张票,不幸的是,这被视为一个问题,而不是可用性问题,但如果我们能让更多人发表评论,它可能会有所帮助:youtrack.jetbrains.com/issue/TW-23699 为什么不在将"&lt;default&gt;" 映射到"master" 的构建脚本中添加条件? 【参考方案1】:

在 teamcity 7 中,它只是 %vcsroot.branch% 返回发展。

在我的情况下,我有

%MajorVersion%.%MinorVersion%.%PatchVersion%-%vcsroot.branch%

这些都在构建参数中设置。 数字格式是 %BuildFormatSemVer% 这是上面的东西和 . 0

%BuildFormatSemVer%.0

返回

#1.0.0-develop.4

【讨论】:

遇到了同样的问题。到目前为止似乎工作得很好,任何情况下它都不能像 %teamcity.build.branch% 那样工作? 功能分支(假设您像其他任何东西一样构建​​它们)会由于 / 而导致问题 在分支规范中使用括号有帮助吗?至少 %teamcity.build.branch% 仅使用名称的那一部分。例如:+:refs/heads/hotfix/(*) +:refs/heads/release/(*) 我开始设置 gitflow;这是一个很好的起点tigranetworks.co.uk/blogs/electricdreams/… 老实说,我发现 TeamCity 文档有点命中注定。不幸的是,我现在在以前的公司投入了大量时间> 这个解决方案对我不起作用。当我使用 %vcsroot.branch% 时,我总是得到默认分支的名称,即使在构建其他分支时也是如此。【参考方案2】:

不理想,但我能够通过在 git 中创建一个名为“teamcity”的新分支并将其设置为 TeamCity 中的默认分支来解决它,它似乎要求该分支实际存在,因为它在我工作时工作创建了分支,但在您输入假名时没有创建。

希望他们真的解决了这个问题,因为这绝对是一个 hack。

【讨论】:

【参考方案3】:

我们在创建管道时多次遇到这个问题。当尝试使用 Gitflow 工作流自动构建功能和发布分支时,它是最明显的。我们能够做的是使用teamcity.build.vcs.branch.github_myprojectsed 中的正则表达式来清理我们希望使用的字符串。这主要是为了调试目的给工件加水印。

更大的问题,至少对我们来说,是 TeamCity 7.1.1 版本不会自动触发任何不是 VCS 根中默认构建的依赖构建。显然这是一个巨大的痛点,因为我们现在将不得不在工具中手动单击。除了使用 HTTP API 调用正确构建步骤的 git 中的钩子之外,我们还没有找到解决此问题的干净方法。

【讨论】:

【参考方案4】:

我不知道这是否已被回答,或者不再相关。

在 TeamCity 10.0.2 中创建自定义参数,例如 %Git.Reference%。如果您需要从 TC 拉(或推)到 git,请将其设置为“ref/head/Dev”或“ref/Head/yourbranch”。在您的“VCS 根”参考中使用它。

【讨论】:

以上是关于如何使用 Git 分支支持覆盖 TeamCity 7.1 中的 <default> 分支名称?的主要内容,如果未能解决你的问题,请参考以下文章

teamcity 中的 Git 短分支名称

分支远程运行触发器不在Teamcity上运行

使用 windows 代理从 teamcity 推送更改到 git 的步骤是啥

如何使用 TeamCity 和 Octopus 完成这种分支和部署策略

如何配置 TeamCity 构建代理以通过 SOCKS 代理使用 git 和 git:// 协议?

git代码覆盖