首页 文章

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

提问于
浏览
12

使用TeamCity与git组合 .
目前,TeamCity设置为“ master ”作为默认分支 .

通常,开发在另一个分支上进行(例如“ dev ") - TeamCity is set to watch for changes on " dev ”并自动构建 .

如果 DEADBEEF-SOME-SHA 已由TeamCity在“ dev " and we fast-forward merge that git SHA1 to " master ”上构建并标记为版本1.2.3.4,则TeamCity仍会执行构建 - 因此我们最终将 DEADBEEF-SOME-SHA 标记为1.2.3.4和1.2.3.5 .

据我所知,将“ dev ”设为默认分支可以防止这种情况发生 .
如果构建已成功完成相同的SHA1,是否有另一种方法可以阻止TeamCity执行构建?

请注意,如果我们直接推送到 master (并且SHA1没有构建),我仍然希望看到构建 .

I'd like to achieve this entirely in TeamCity if possible - no additional scripts/writing of files etc etc .

3 回答

  • 5

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

    所以我要做的是:

    • 写入一个专用文件夹(可由所有代理访问),在每个作业结束时构建sha1
      如果该sha1文件尚不存在,则
    • 仅触发新作业 .
  • 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

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

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

    将分支过滤器设置为

    +:dev
    

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

相关问题