将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中完全实现这一点 - 没有额外的脚本/文件编写等等。
答案 0 :(得分:5)
您可以查询特定SHA1的构建版本...但是have to know your previous buildID for that。
所以我要做的是:
答案 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允许它)