问题 如何仅为标签运行TeamCity构建?


我有几个项目生成我发布到内部服务器的NuGet包。我们正在使用 语义版本控制,并在我们的Git存储库中使用标签来控制版本号。

我正在这样标记:

git tag -a v1.0.0 -m "tagged"

而且,在TeamCity构建期间,我运行 git describe --long,产生如下输出:

v1.0.0-0-ge9c047d

输出中的第四个数字是标记后的提交数。该 0 这意味着自标签以来没有提交任何提交。我使用前四个数字作为版本号(顺便提一下,整个字符串作为AssemblyInformationalVersion)。

我有TeamCity包并发布了一个NuGet包,但这里是粘性的。我只想发布标签,从不在标签之后提交(因为在这种情况下版本号可能是错误的,可能非常错误)。

我已经尝试将VCS根目录中的“分支规范”设置为“+:refs / tags / *”,这会导致构建所有标记,但TeamCity也坚持构建“默认分支”。如果我将“默认分支”设置为不存在的东西,我会收到错误。

如果一个特定的构建不是一个标签,我已经考虑过尽早结束构建,但我不知道如何在没有失败构建的情况下做到这一点,这不是我想要的。

如何使一个或多个构建步骤仅运行新标记,而不是常规提交?


7102
2018-03-19 14:31


起源



答案:


如果您使用的是TeamCity 8.x,则现在支持 VCS分支触发器,这将允许您不从默认分支运行构建。

尝试这个:

  1. 将VCS Root中的分支规范保留为“+:refs / tags / *”
  2. 将VCS构建触发器规则更改为:

    +:*

    - :<默认>

这将从触发器中过滤掉默认分支,您无需取消构建。


10
2018-03-19 18:59



这很接近,但单击“运行”按钮仍会构建默认分支。 - Mark
那种情况下的预期行为是什么? - Pedro Pombeiro
好问题。我猜 某物 会运行,但在这种情况下,我不希望任何部署到NuGet服务器,这意味着,最终的构建步骤将不会执行。理想情况下,构建不会 失败,只是不会导致任何工件的部署。 - Mark
它应该针对哪个提交?最新的标签?最新提交? - Pedro Pombeiro
通过使用依赖构建配置,并在Publish NuGet构建配置上放置适当的标记触发器,这是完全可行的。 - Pedro Pombeiro


答案:


如果您使用的是TeamCity 8.x,则现在支持 VCS分支触发器,这将允许您不从默认分支运行构建。

尝试这个:

  1. 将VCS Root中的分支规范保留为“+:refs / tags / *”
  2. 将VCS构建触发器规则更改为:

    +:*

    - :<默认>

这将从触发器中过滤掉默认分支,您无需取消构建。


10
2018-03-19 18:59



这很接近,但单击“运行”按钮仍会构建默认分支。 - Mark
那种情况下的预期行为是什么? - Pedro Pombeiro
好问题。我猜 某物 会运行,但在这种情况下,我不希望任何部署到NuGet服务器,这意味着,最终的构建步骤将不会执行。理想情况下,构建不会 失败,只是不会导致任何工件的部署。 - Mark
它应该针对哪个提交?最新的标签?最新提交? - Pedro Pombeiro
通过使用依赖构建配置,并在Publish NuGet构建配置上放置适当的标记触发器,这是完全可行的。 - Pedro Pombeiro