如何使用 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 公开为 <default>
- 这意味着当构建步骤扩展时
E:\Packages\MyProject\%teamcity.build.branch%\
它以 E:\Packages\MyProject\<default>
结尾 - 然后由于它不是有效的 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
但理想情况下,我需要将 master 作为 teamcity.build.branch 用于我的构建步骤。
我可以在运行时转换参数吗?覆盖行为?我什至尝试将 VCS 分支名称设置为 DO_NOT_USE,希望“master”不再匹配默认值 - 但这似乎也不起作用。
【问题讨论】:
我为 TeamCity 的 YouTrack 项目添加了一张票,不幸的是,这被视为一个问题,而不是可用性问题,但如果我们能让更多人发表评论,它可能会有所帮助:youtrack.jetbrains.com/issue/TW-23699 为什么不在将"<default>"
映射到"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_myproject
和sed
中的正则表达式来清理我们希望使用的字符串。这主要是为了调试目的给工件加水印。
更大的问题,至少对我们来说,是 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> 分支名称?的主要内容,如果未能解决你的问题,请参考以下文章
使用 windows 代理从 teamcity 推送更改到 git 的步骤是啥
如何使用 TeamCity 和 Octopus 完成这种分支和部署策略