Teamcity仅触发来自一个分支的标签

时间:2018-07-03 11:32:58

标签: git version-control continuous-integration teamcity

我的团队正在使用TeamCity for CI,我对此很陌生。

我们正在使用git标记来帮助进行版本控制,但是我遇到了一个问题。

到目前为止,我设法做到了,因此在TeamCity触发器中创建新标签时会触发该触发器,但是问题是它会触发任何分支和任何触发器。 仅当在特定分支上创建了TAGS时,才有办法使构建触发吗?

我只希望在主分支上创建标签时触发构建。

enter image description here

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在Git中作为对象的标签没有绑定到任何特定的分支-它们只是指向某些修订版。标签甚至可以指向那些不属于任何分支(分离的HEAD)的修订。因此,我怀疑TeamCity判断是否在分支中创建 来监视Git标签在技术上具有挑战性。

但是,您可以通过为Git标签建立一些命名规则来解决此问题。例如,在master分支上创建的标签应称为release/somethingmain/something。在这种情况下,Branch specification字段中的值可以缩小到+:refs/tags/release/*

答案 1 :(得分:1)

通常更容易触发对分支的任何提交的构建,而不是通过这种方式使用标签。例如,在gitflow中,对master的唯一提交应该是代表新版本的合并,因此,如果使用该约定,则只需监视master即可触发构建。

如果要使用标签,实际上有两种选择。

如Yan Sklyarenko所建议的那样,简单的选择是在标签上使用命名约定。当然,有人可能将错误的标签放在错误的位置,这可能是功能(灵活)或错误(错误导致生产构建浪费)。那里有一种“隐藏的魔法”元素。但这至少是一个易于实现的选项。

直接或多或少地执行您要查询的内容的更困难的方法是,触发任何标签上的构建,然后包括一个中止构建的步骤,除非发现该标签位于“ {{1 }}分支”。

现在我用引号将“放在master分支上,因为正如Sklyarenko先生所指出的,它在git中如何构造分支和标签有些松散。确实,您会说,您想了解“在master可以到达的提交上”的新标记。实际上,您可能的意思是“仅可使用第一个父级指针从master进行访问”。就是说

master

如果我们标记 D / \ A -- B - E -- F <--(master) \ C <--(branch) ,则无法从C到达。 (“可到达”的意思是通过父指针,因此您只能沿着图表的左侧行。)

master可以到达

D,但是如果“正常进行”,则masterD的第二父级。因此,如果我们说“可通过第一位父母的指针到达”,那么EABE就有资格-这可能就是您在“ { {1}}”。

我知道在TC中进行这种检查的唯一方法是执行脚本化的构建步骤。因此,您需要一个git命令来提供信息,此标记是否符合条件?您可以使用:

F

(其中master是标签的名称),如果标签符合条件,它将返回git rev-list --first-parent master |grep -q $(git rev-parse <tagname>)

鉴于您如何使用标签,您可能还需要检查相关标签是否为<tagname>上的最新标签。也就是说,如果您有

0

如果有人标记master,而不是标记A -- B -- C -- D <--(master) ^ tag-1.0 DA,则您可能只想构建 (因为您在B处已经有标签)。在这种情况下,您可以检查是否

C

返回新标签的名称。