如果存在该SHA1的构建,则阻止TeamCity构建快速合并到master

时间:2017-10-19 09:24:25

标签: git triggers teamcity

将TeamCity与git结合使用 目前,TeamCity已设置为" master"作为默认分支。

通常,开发发生在另一个分支上(例如" dev") - TeamCity设置为监视" dev"并自动构建。

如果DEADBEEF-SOME-SHA已经建成&由TeamCity标记为构建1.2.3.4 on" dev"我们快速将git SHA1合并到" master",TeamCity仍然执行构建 - 所以我们最终将DEADBEEF-SOME-SHA标记为1.2.3.4和1.2。 3.5。

据我所知,制作" dev"默认分支会阻止这种情况 是否有另一种方法可以阻止TeamCity执行构建,如果构建已经成功完成相同的SHA1?

请注意,如果我们直接推送到master(并且SHA1在其他分支上不存在/尚未构建),我仍然希望看到构建。

如果可能的话,我想在TeamCity中完全实现这一点 - 没有额外的脚本/文件编写等等

3 个答案:

答案 0 :(得分:5)

您可以查询特定SHA1的构建版本...但是have to know your previous buildID for that

所以我要做的是:

  • 在专用文件夹(可由所有代理访问)中写入每个作业结束时构建的sha1
  • 如果该sha1文件尚未存在,
  • 仅触发新作业。

答案 1 :(得分:2)

也许我错过了一些东西:

如果在您的仓库中标记了提交,则在开始新构建之前,您可以检查头部提交是否尚未标记:

# if you use exclusively lightweigth tags :
git show-refs --tags | grep $(git rev-parse HEAD)
# also check that the tag looks like a build tag, e.g : refs/tags/1.2.3.4
   | grep "refs/tags/[1-9.]*$"

# if you use annotated tags :
git show-refs --tags --dereference | grep $(git rev-parse HEAD)
# the grepped line may look like : refs/tags/1.2.3.4^{}
   | grep -E "refs/tags/[1-9.]*(\^\{\})?$"

答案 2 :(得分:2)

如果您只想限制自动触发构建的分支,请为VCS触发器设置分支过滤器:

项目设置=>触发器=> VCS触发器(编辑)=>分支过滤器

将分支过滤器设置为

+:dev 

然后(即使" master"是默认分支),构建只会在dev上自动触发。仍然可以在其他分支上执行ad-hoc构建(假设VCS root允许它)