本文讨论和点评GitLab相关的代码评审工具,使用Github的可以另行参考。
代码评审的几种方式
从代码提交的时机来看,一般会有两种模式,即开源MR/PR模式和commit模式。而这这种划分默认是在代码提交的环节进行代码评审。因此从代码提交与代码评审的关系来看,也可以有所谓的代码提交时触发的代码评审和与代码提交无关的代码评审。而从代码评审的地点来看,一般也会有两种模式,即WEB模式和IDE模式。
在开源项目维护的场景下,催生了一种通过合并请求(merge request)进行代码评审的方式。当某个参与人员完成了某项特性功能的开发或者是缺陷的修复后,将全部新增代码纳入一个合并请求,提交给项目维护者进行评审,通过后完成合并。由于github和gitlab在开源代码仓库服务上的巨大成功,这两个平台也广泛被私有化部署和使用。伴随着这两个平台成为事实上的Git代码库标准,这两个平台所内置的这种工作模式也被相当部分公司所使用。
除了开源项目维护的场景之外,对于企业内部的开发模式而言,还可以有另外一种场景,那就是针对一个commit来实施代码评审。在其从个人代码库向被团队的代码库进行提交之前,由提交者发起对于每个commit进行评审。只有在评审通过后方可进行合并。这中场景的典型工具就由Google公司开源的Gerrit系统。
当然,随着软件工程产业自身的发展,也逐渐有专注于软件评审的产品出现了,例如UPSource和CodeStream。这些产品也挖掘出一种所谓的“社交式评审”的模式,即将原先串型的与代码提交挂钩的代码评审工作变成了一种与之脱钩的,聊天式的评审,从而实现了任何时间、任何代码,想评就评的模式,也降低了代码评审带来的压力感。
而从代码评审的地点来看,一般也会有两种模式,即WEB模式和IDE模式。上述提到的三种平台,一般是通过平台提供的Web界面来进行代码评审,添加评论,进行代码合并或者拒绝合并请求的操作。由于WEB模式需要代码评审人员以及提交人员需要在Web上完成相关的工作,存在一个工作台切换的问题。对于习惯于在IDE中进行工作的开发人员来说,如果能不离开IDE进行代码评审,有助于提升其工作效率。相应地,有各种IDE的插件提供类似的能力。
本文简要介绍各种在IDEA中进行代码评审的工具。
被IDEA原厂忽略的Gitlab集成功能
IDEA作为一个主流的Java开发IDE,其VCS模块居然没有关于发起MR和进行代码评审的功能。这是比较令人诧异的。
在查阅了相关资料后,笔者找到了这样一个issue。这是一个已经存在了8年的需求,要求IDEA团队提供和Gitlab进行集成的能力,能发起MR和进行Code Review。
来源:https://youtrack.jetbrains.com/issue/IDEA-109294
然后,这个issue的状态目前还处于Open状态,尚未被解决。也有群众留言表示,既然GitHub已经被微软收购,大量的开源项目竞相涌入Gitlab,IDEA应该抓住机会来提供与GitLab集成的功能。
不过距离这个留言已经过去3年了,貌似还是不为所动。感兴趣的读者,可以去这个网址进行投票,以更早地呼唤出这个特性。
开源插件1- GitLabProject 2020
原厂留下的缝隙,很快就让开源插件给填补上了。首先介绍GitLabProject。
以下是这个插件的简单功能介绍,来自插件开发者,
GitLab Projects Plugin
Simple plugin that is adding support for GitLab specific actions to JetBrain IDEs
Features:
lGitLab Checkout support - add GitLab autocompleter to IDE Git checkout dialog
lGitLab Share dialog - allows quick import of new projects to GitLab, user can specify namespace and project visibility
lGitLab Merge Request dialog - user can quickly create new merge requests from current branch
lGitLab Merge Request List dialog - user can list and accept all open code reviews
创建MR
可以看到, 这个插件的主要功能之一就是创建MR。安装完这个插件后,从VCS->Git->Gitlab->Create Merge Request 就能唤起创建MR的界面。
在选择完目标代码库之后,就进入了真正创建MR的环节,选择分支、批准人,描述等,整个界面功能和在Gitlab页面上完成时高度一致的,当然还包括了在合并后删除原分支以及差异查看的功能。
在Diff这个代码比对的场景,可以逐个对待合并的部分代码差异进行比对。
确认无误后,就点击提交就实现了MR的创建,在IDEA中会有提示框闪现。
代码评审和批准
作为代码评审者,可以从VCS->Git->Gitlab->List Merge Requests 进入代码评审和审批界面。
首先,在点击这个按钮后会读取并展示这个代码库中的所有待评审的MR。选择某个MR,点击底部的Code Review按钮,就可以唤起代码评审的浮窗。
类似的,评审者可以通过Diff比对两个MR的差异,通过Comments 来阅读MR的消息(包括来自CI/质量门禁的消息)并填入审批人的审批意见。
当然,最后就是点击Merge 按钮来审批通过了。
合并完成,IDEA还是会有消息条弹出。
碍于条件所限,笔者并没有测试评审人员是否在MR创建后以及提交人在MR被批准后能否在IDEA中收到通知消息。通知功能既然没有列在功能列表中,可能并没有吧。感兴趣的读者可以为这个插件提交ISSUE或者参与维护
https://github.com/wudeyong/GitLabProjects
开源插件2-Merge Request Integration CE/EE
如这个插件的名字所言,这个插件的主要功能就是进行MR时的代码评审和批准/撤销。相对于上一款开源插件来说,MR相关的功能提供得更为细致,
What you can do:
Check approval statuses of merge requests which are waiting for your approval.
Filter Merge Requests which are assigned to you, belongs to your colleagues, etc
Check pipeline status and approval status.
Do code review, navigate code with Diff View right in your IDE.
Address review comments, navigate comments in editors.
Add and reply a comment
Approve/revoke your approval
More and more features will be coming soon :)
其中的回应评论、检查流水线结果、撤回批准等功能是非常贴心的。以下是这个插件所展示的某个MR的基本信息,还可以在不同的tab页中看到描述、评论和具体的commits信息。
所以,这个插件的主要使用目标用户就是那些专门做代码评审的工程师或者技术主管了。因为这个插件忽略了一个重要的功能,就是创建MR。对于那些即需要提交MR,又需要进行评审的工程师来说,为了能在IDEA中完成所有上述工作,需要额外再安装一个别的插件,如GitLabProject。
当然,这个产品也有EE版本,个人用户收费为$1/M。
先介绍到这里了。下一篇将介绍收费的产品。