将TeamCity与git结合使用
目前,TeamCity是以"master
"作为默认分支来设置的。
通常,开发发生在另一个分支(例如"dev
")上——TeamCity被设置为监视"dev
"上的更改并自动构建。
如果CCD_ 4已经被构建&TeamCity在"dev
"上标记为版本1.2.3.4,并且我们将git SHA1快速合并为"master
",TeamCity仍然执行构建-因此我们最终将DEADBEEF-SOME-SHA
标记为1.2.3.4和1.2.3.5。
据我所知,将"dev
"作为默认分支可以防止这种情况的发生
如果同一SHA1的构建已经成功,是否有其他方法可以阻止TeamCity执行构建?
注意,如果我们直接推送到master
(并且SHA1在其他分支上不存在/尚未构建),我仍然希望看到一个构建。
如果可能的话,我希望完全在TeamCity中实现这一点-无需额外的脚本/文件编写等。
您可以查询特定SHA1的构建……但您必须知道之前的构建ID。
所以我要做的是:
- 在一个专用文件夹(所有代理都可以访问)中写入在每个作业结束时构建的sha1
- 仅当sha1文件不存在时才触发新作业
也许我错过了什么:
如果提交在你的repo中被标记,在开始新的构建之前,你可以检查头部提交是否已经被标记:
# 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.]*(^{})?$"
如果您只是想限制自动触发构建的分支,请为VCS触发器设置一个分支过滤器:
项目设置=>触发器=>VCS触发器(编辑)=>分支过滤器
将分支过滤器设置为
+:dev
那么(即使"master"是默认分支)构建将只在dev上自动触发。仍然可以在其他分支上执行特别构建(假设VCS根允许)