我有一个 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 7 中,它只是 %vcsroot.branch% 回报发展。
就我而言,我有
%MajorVersion%.%MinorVersion%.%PatchVersion%-%vcsroot.branch%
这些都是在构建参数中设置的。 数字格式是 %BuildFormatSemVer% ,即上面的内容 和 。 {0}
%BuildFormatSemVer%.{0}
哪个回报
#1.0.0-develop.4
并不理想,但我可以通过在 git 中创建一个名为“teamcity”的新分支并将其设置为 TeamCity 中的默认分支来解决这个问题,它似乎要求该分支实际存在,因为它在我创建时有效分支,但当你输入假名时却没有。
希望他们能真正解决这个问题,因为这绝对是一个黑客行为。
我们在创建管道时多次遇到这个问题。当尝试使用 Gitflow 工作流程自动构建功能和发布分支时,这是最明显的。我们所能做的就是使用
teamcity.build.vcs.branch.github_myproject
和 sed
中的正则表达式来在我们希望使用字符串时对其进行清理。这主要是为了调试目的对工件加水印。
至少对我们来说,更大的问题是 TeamCity 7.1.1 版本不会自动为 VCS 根中默认构建之外的任何内容触发依赖项构建。显然这是一个巨大的痛点,因为我们现在必须在工具中手动单击。除了 git 中的钩子(使用 HTTP API 调用正确的构建步骤)之外,我们还没有找到一种干净的方法来解决这个问题。
我不知道这是否是以前的答案,或者不再相关。
在 TeamCity 10.0.2 中创建自定义参数,例如 %Git.Reference%。如果您需要从 TC 拉(或推)到 git,请将其设置为“ref/head/Dev”或“ref/Head/yourbranch”。在您的“VCS root”参考中使用它。