为任何提交到分支触发构建通常比以这种方式使用标签更简单。例如,在gitflow 中,对master 的唯一提交应该是代表新版本的合并,因此如果您使用该约定,您可以简单地监控master 以触发构建。
如果要使用标签,其实有两种选择。
正如 Yan Sklyarenko 建议的那样,简单的选择是在标签上使用命名约定。当然,有人可能将错误的标签放在错误的位置,这要么是一个特性(它很灵活),要么是一个错误(错误会导致浪费生产构建)。那里有一种“隐藏的魔法”元素。但至少它是一个易于实现的选项。
直接或多或少地执行您所要求的更难的方法是在任何标签上触发构建,然后包含一个中止的构建步骤,除非发现该标签位于“master分支”。
现在我将“在master 分支上”放在引号中,因为正如 Sklyarenko 先生所指出的那样,它在 git 中如何构建分支和标签的说法有点松散。真的,您会说,您想了解“可从master 访问的提交”的新标签。事实上,您可能的意思是“仅使用第一父级指针从master 可访问”。也就是说
D
/ \
A -- B - E -- F <--(master)
\
C <--(branch)
如果我们标记C,则无法从master 访问。 (“可到达”是指通过父指针,因此您只能沿着图上的左侧行。)
D 可以从master 访问,但如果事情“正常”完成,D 是E 的第二个父级。因此,如果我们说“可通过第一父指针访问”,那么 A、B、E 和 F 符合条件 - 这可能就是您所说的“在 master”上的意思。
我知道在 TC 中进行这种检查的唯一方法是使用脚本构建步骤;那么你需要一个 git 命令来提供信息,这个标签是否符合标准?你可以使用这个:
git rev-list --first-parent master |grep -q $(git rev-parse <tagname>)
(其中<tagname> 是标签的名称)如果标签符合条件,将返回0。
鉴于您使用标签的方式,您可能还想检查相关标签是否是master 上的最新标签。也就是说,如果你有
A -- B -- C -- D <--(master)
^
tag-1.0
仅如果有人标记D,而不是标记A、B 或C(因为您已经有标记C )。在这种情况下,您可以检查是否
git describe --tags --first-parent --abbrev=0 master
返回新标签的名称。