如何在TeamCity中构建git标签?

如何在TeamCity中构建git标签?,git,tags,teamcity,git-checkout,Git,Tags,Teamcity,Git Checkout,我想为TeamCity服务器提供一个git标记来构建它。 我将标签(即release_1.1)作为参数传递给作业。因此,在作业内部,标记可用作%tag%,但在版本控制设置下,我看不到任何使用此参数的方法,服务器无法签出此标记。 是否可以在设置中使用此参数签出标记?您需要在refs/tags/${tagName}中指定标记格式 因此,您的将是refs/tags/release_1.1我已设法实现以下功能: 在生成配置中的“生成参数”下: 定义配置参数: 名称:TagToBuild 种类:配置参数

我想为TeamCity服务器提供一个git标记来构建它。 我将标签(即
release_1.1
)作为参数传递给作业。因此,在作业内部,标记可用作
%tag%
,但在
版本控制设置下,我看不到任何使用此参数的方法,服务器无法签出此标记。

是否可以在设置中使用此参数签出标记?

您需要在
refs/tags/${tagName}
中指定标记格式


因此,您的将是
refs/tags/release_1.1

我已设法实现以下功能:

在生成配置中的“生成参数”下:

定义配置参数

  • 名称:
    TagToBuild
  • 种类:
    配置参数
  • 价值:
  • 规格:
    • 标签:
      要生成的标签
    • 描述:
      这应该是标签的完整路径,即refs/tags/0.5.5
    • 显示:
      提示
    • 类型:
      Text
请注意,“值”字段故意留空

然后,在VCS根目录中:

  • 分支名称:
    %TagToBuild%
运行生成时,系统会提示我提供分支/标记名:

输入一个值,例如
refs/tags/0.5.0
,将生成一个漂亮的构建,结果中列出了分支名称:

如果您试图以描述之外的任何方式帮助用户,这似乎失败了。因此,您不能执行以下任何操作:

  • 在配置参数中,将“值”设置为
    refs/tags/
    ,并让用户添加标签名
  • 在VCS根目录中,将“分支名称”设置为
    refs/tags/%TagToBuild%
  • 在这两种情况下,我在TeamCity的稍旧(7.1)实例中都得到了错误:

    未能收集更改,错误:jetbrains/buildServer/buildTriggers/vcs/VcsRootChangesLoader.loadChanges的@NotNull参数的参数2不能为null


    我没有用标签做过,但我用分支做过。我告诉TeamCity通过指定它应该构建
    +:refs/heads/*
    来构建所有分支。现在,每当我推动任何分支,TeamCity都会建立它。然后在构建中,我使用
    git分支
    ,查找以
    *
    开头的行。我将该分支名称嵌入到一个方便的位置(AssemblyInfo.cs用于.NET,package.json用于节点)。请参阅

  • 转到编辑配置设置->版本控制设置
  • 对于此生成配置的所有VCS根目录,请单击编辑,然后:

  • 将“+:refs/tags/*”放入分支规范文本框
  • 选中“将标记用作分支”

  • 然后,当您按下run旁边的“…”按钮时,您可以选择一个标记。

    如果我指定
    refs/tags/${tagName}
    作为默认分支,TeamCity开始抱怨它无法连接到git repo,难道没有更干净的解决方案吗?这应该是一个非常常见的用例。将我的分支名称设置为
    refs/tags/${%tag%}
    会导致错误:“找不到默认分支'refs/tags/${0.5.0}'的修订版”,但将其设置为
    refs/tags/%tag%
    会导致“收集更改失败,错误:@NotNull参数的参数2”看起来,如果您将默认分支设置为
    %full\u tag%
    ,而不是
    refs/tags/%tag%
    ,并且默认full\u tag%为空,TeamCity不会抱怨。但是,您需要将完整引用作为参数传递(即full_tag=
    refs/tags/development-12
    )。我遇到了一个类似的问题-将“分支名称”设置为“refs/tags/%TagToBuild%”我得到:
    收集更改失败,错误:jetbrains/buildServer/buildTriggers/vcs/VcsRootChangesLoader.loadChanges的@NotNull参数的参数2不能为null
    ,但仍在生成所有内容。我认为js3dev正在寻找(我知道我是)一种方法,用一个易于识别的标记标记repo中的一个点并构建它-我的一些工具将为不同的环境创建不同版本的.config文件,但我只想在通过QA后为“发布”而构建,但是头部可能因为某种原因移动了。通常,当我有这种需要时,我会创建一个新的分支--
    Releasev2.7
    ,然后推动分支。TeamCity的“build all Branchs”(构建所有分支)将其拾取并运行。您可以通过创建一个名为
    TeamCity.build.branch
    的参数来覆盖分支名称,这样您就可以覆盖分支并将其设置为您想要的任何值,即
    release
    ,尽管严格来说这不是我的情况,你的回答给了我一个提示,帮助我解决了一个我已经挣扎了好几天的问题!我希望我能投两次票。谢谢!对于TeamCity的更高版本(例如,我们使用的是9.1.5),现在可以将VCS根目录的“默认分支”设置为类似于
    refs/tags/%versionRoot%
    ,这比每次都必须键入完整路径要干净一点,这是迄今为止最干净最自然的方式。标记和分支通过“自定义运行”对话框可用。不需要任何自定义变量。然后,您可以像普通一样将分支规范用于构建配置的所有其他方面。值得一提的是,选择标签需要自定义构建。同时,请等待30秒并刷新您的TeamCity页面,然后按Run。不确定我是否理解此步骤,TeamCity builds master默认情况下,我没有收到任何选择标签的提示:我在TeamCity Enterprise 9.1.3上,我也没有收到标签提示??