在Bitbucket中显示PR Build状态

Ank*_*jay 7 git teamcity bitbucket pull-request bitbucket-server

我们使用Team City(版本2017.1.5)建立了构建管道,并且我们使用内部Bitbucket服务器(版本4.8)作为我们的git存储库.我们的分支模型是GitHub Flow

我们使用mendhak Team City插件向Bitbucket服务器报告构建状态.此外,我们已经在团队城市中创建了一个构建来构建具有分支触发器的拉取请求:+:refs/(pull-requests/*)/merge.

但是,此分支过滤器的构建状态在拉出请求窗口/页面的Bitbucket中不可见.

如果我们在特征分支上使用分支过滤器(例如+:refs/heads/(feature/*)),则在PR上正确显示构建状态.但是,我们有兴趣在Pull Request上显示PR构建状态.

我们发现自2013年以来Atlassian 已经存在一个未解决的问题(是的 - 差不多5年).看起来它不会很快修复.

问:

是否有任何可以解决此问题的变通方法或Bitbucket插件(或Team City插件).我们希望避免添加任何额外的分支过滤器/触发器.

我觉得这是一个相当普遍的问题,应该已经被很多其他团队/个人解决了.我恰好没有找到合适的资源/材料.

任何指针,都非常感谢.

G. *_*ies 7

问题是你正在使用的引用(下refs/pull-request/*)只是内部的,并且在Bitbucket Web UI中不可见.

想象一下,你在Bitbucket Server上有一个像这样的回购:

在此输入图像描述

现在假设您从"分支"到"主"创建PR.Bitbucket Web UI中可见的引用不会改变,但是会git clone --mirror显示refs/pull-request/*在幕后创建的隐藏引用:

git clone --mirror http://vm.bit-booster.com/bitbucket/scm/bb/rebase-example-1.git
cd ./rebase-example-1.git
git log --all --date-order --decorate --graph
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

使用Team City或Jenkins或Bamboo或任何使用的构建refs/pull-requests/1/merge(例如,01ebefda503c在此示例中)与仅构建相比确实具有一个主要优势branch.在实际合并之前,您可以预先构建真实的东西(合并).这就像是对未来的一瞥.

但是,如果您尝试使用相同的ref发布build-status,那么它有一个主要的缺点.01ebefda503c在Bitbucket的Web UI中看不到提交ID ,因此拉取请求构建状态集成将无法获取成功(或失败)的构建.

但是有一个很好的解决方法.让Team City(或Jenkins或Bamboo等)毫无意义地将构建状态推送到抢占式合并,然后使用curl将相同构建状态的副本发送到HEAD ^ 2,也01ebefda503c^2称为aka e466842138b65.

(背景:插入符号运算符'^'抓取指定提交的给定父节点,例如,^ 1是第一个父节点,^ 2是第二个父节点,如果你正在与疯狂的人一起工作,^ 3将是第三个父节点章鱼合并,等等.个人我多年没见过真正的章鱼合并.还记得绝大多数提交只有一个父母,也就是"珍珠串"式提交.只有合并有2个或更多的父母.)

您可以像这样触发HEAD ^ 2的构建状态:

curl --user user:password -H "Content-Type: application/json" -X POST -d \
  '{"state":"SUCCESSFUL", "key":"K", "name":"K-9", "url":"http://bit-booster.com/"}' \
  http://vm.bit-booster.com/bitbucket/rest/build-status/1.0/commits/e466842138b658a1b09caa0b1caea065194311ce 
Run Code Online (Sandbox Code Playgroud)

然后在PR上可以看到构建状态.

并检查我的Bitbucket 插件.:-)