2017-10-19 61 views
10

将TeamCity与git结合使用。
目前TeamCity设置为“master”作为默认分支。阻止TeamCity构建在快速合并上,以便在该构建中存在SHA1的情况下

通常情况下,开发发生在另一个分支(例如“dev”) - TeamCity设置为监视“dev”上的更改并自动构建。

如果DEADBEEF-SOME-SHA已建成&标记通过的TeamCity作为构建1.2.3.4的“dev”我们是Git可以SHA1快进合并为“master”,TeamCity的仍执行构建 - 所以我们最终DEADBEEF-SOME-SHA被标记作为1.2.3.4和1.2.3.5。

据我所知,制作“dev”默认分支会阻止这一点。
是否有另一种方法来阻止TeamCity执行构建,如果构建已经成功执行相同的SHA1?

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

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

+0

我想在TeamCity中完成这一切 - 理想情况下全部都在触发器配置部分内完成。 – eddiewould

回答

1

如果仅仅希望限制构建自动触发的分支,请为VCS触发器设置分支过滤器:

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

设置分支滤波器

+:dev 

然后(尽管“主人”是默认的分支)建立才会自动触发的开发。仍然有可能在其他分支上执行ad-hoc构建(假设VCS root允许它)

+0

有趣。比我的答案更精确。 +1 – VonC

5

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

所以我会做的是:

  • 写在一个专用的文件夹中(所有代理访问),在每个作业年底建成的SHA1
  • 只有当SHA1文件是触发一个新的工作尚不存在。
+0

感谢您的建议,但正在尝试避免更多移动部分(写入文件) – eddiewould

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.]*(\^\{\})?$" 
+0

您能否详细说明在哪里放置?在VCS触发器规则部分? – eddiewould

相关问题