如果存在针对该SHA1的构建,则阻止TeamCity在快进合并到master上构建



将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根允许)

最新更新