如何在 TeamCity 中构建 git 标签?
Posted
技术标签:
【中文标题】如何在 TeamCity 中构建 git 标签?【英文标题】:How can I build a git tag in TeamCity? 【发布时间】:2013-12-19 15:53:46 【问题描述】:我想为 TeamCity 服务器提供一个 git 标签来构建它。
我将标签(即release_1.1
)作为参数传递给作业。因此,在作业内部,标签以%tag%
的形式提供,但在Version Control Settings
下,我看不到任何使用此参数的方法,因此服务器可以签出此标签。
有没有什么方法可以在设置中使用这个参数来签出标签?
【问题讨论】:
我遇到了类似的问题 - 将“分支名称”设置为“refs/tags/%TagToBuild%”我得到:Failed to collect changes, error: Argument 2 for @NotNull parameter of jetbrains/buildServer/buildTriggers/vcs/VcsRootChangesLoader.loadChanges must not be null
【参考方案1】:
-
进入编辑配置设置 -> 版本控制设置
对于此构建配置的所有 VCS 根,请单击编辑,然后:
-
将“+:refs/tags/*”放入分支规范文本框
勾选使用标签作为分支
然后你就可以在按下运行旁边的“...”按钮时选择一个标签。
【讨论】:
恕我直言,这是迄今为止最干净最原生的方式。通过自定义运行对话框可以使用标签和分支。不需要任何自定义变量。然后,您可以像正常一样将分支规范用于构建配置的所有其他方面。 我同意这似乎是构建标签的最简洁方式。应该提到的是,需要自定义构建才能选择标签。 并等待 30 秒并刷新 TeamCity 页面,然后再按运行 不确定我是否理解这一步,teamcity 默认构建 master 我没有收到任何提示选择标签:i.imgur.com/CnT8XBN.png我在 TeamCity Enterprise 9.1.3 好的,所以我不得不去 teamcity 中的项目页面,然后单击“运行”按钮右侧的小菜单“...”图标。这为您提供了与 4 个选项卡的对话。第二个说“更改”,在那里您可以在“构建分支”下拉列表中指定要构建的标签。我正在使用 TeamCity 版本 Enterprise 9.1.5(内部版本 37377)【参考方案2】:我已经设法使以下工作:
在构建配置中,在“构建参数”下:
定义一个配置参数:
姓名:TagToBuild
类:Configuration parameter
价值:
规格:
标签:Tag to build
描述:This should be the full path to the tag, i.e. refs/tags/0.5.5
显示:Prompt
类型:Text
请注意,“值”字段是故意留空的。
然后,在 VCS 根目录中:
分公司名称:%TagToBuild%
当我运行构建时,系统会提示我提供分支/标签名称:
输入诸如refs/tags/0.5.0
之类的值会生成一个不错的构建,结果中会列出分支名称:
如果您试图以超出描述的任何方式帮助用户,这似乎会失败。所以你不能做以下任何事情:
-
在配置参数中,将“值”设置为
refs/tags/
,并让用户添加标签名称。
在 VCS Root 中,将“分支名称”设置为 refs/tags/%TagToBuild%
。
在我们稍微旧 (7.1) 的 Team City 实例中,我都得到了错误:
无法收集更改,错误:jetbrains/buildServer/buildTriggers/vcs/VcsRootChangesLoader.loadChanges 的@NotNull 参数的参数2 不能为空
【讨论】:
您可以通过创建名为teamcity.build.branch
的参数来覆盖分支名称,这样您就可以覆盖分支并将其设置为您想要的任何内容,即release
虽然严格来说不是我的情况,但您的回答给了我一个提示,帮助我解决了我多年来一直在苦苦挣扎的问题!我希望我可以投票两次。非常感谢!
使用更高版本的 TeamCity(例如,我们使用的是 9.1.5),现在确实可以将 VCS 根目录的“默认分支”设置为类似refs/tags/%versionRoot%
,比每次都输入完整路径要干净一些【参考方案3】:
我没有用标签做这个,但是我用分支做了这个。我告诉 TeamCity 构建所有分支,方法是指定它应该构建 +:refs/heads/*
。现在,每当我推送任何分支时,TeamCity 都会构建它。然后在构建中使用git branch
并查找以*
开头的行。我将该分支名称嵌入到一个方便的位置(AssemblyInfo.cs 用于 .NET,package.json 用于节点。)请参阅http://confluence.jetbrains.com/display/TCD8/Working+with+Feature+Branches
【讨论】:
但这仍在构建一切。我认为 js3dev 正在寻找(我知道我在寻找)是一种在 repo 中使用易于识别的标签标记点并构建它的方法——我的一些工具将为不同的环境创建不同版本的 .config 文件,但是当我通过 QA 时,我只想为“发布”而构建,但由于某种原因,头部可能已经移动。 通常当我有这个需求时,我会创建一个新分支——例如Releasev2.7
——然后推送这个分支。 TeamCity 的“构建所有分支”将其拾取并运行。【参考方案4】:
您需要在refs/tags/$tagName
中指定标签格式。
所以你的应该是refs/tags/release_1.1
。
【讨论】:
如果我将refs/tags/$tagName
指定为默认分支,TeamCity 开始抱怨它无法连接到 git repo,难道没有更清洁的解决方案吗?这应该是一个非常常见的用例。
将我的分支名称设置为 refs/tags/$%tag%
会导致错误:“找不到默认分支 'refs/tags/$0.5.0' 的修订版”,但将其设置为 refs/tags/%tag%
导致“无法收集更改,错误:@NotNull 参数的参数 2”
看起来如果您将默认分支设置为 %full_tag%
而不是 refs/tags/%tag%
并且默认 full_tag 为空,TeamCity 不会抱怨。但是您需要将完整引用作为参数传递(即 full_tag=refs/tags/development-12
)。以上是关于如何在 TeamCity 中构建 git 标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Git 分支支持覆盖 TeamCity 7.1 中的 <default> 分支名称?