研发团队如何借助Gitlab来做代码review
代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情。如何借助现有工具在团队内部形成代码review的流程与规范,是team leader或技术管理者需要考虑的问题。本文分享一种基于Gitlab代码merge流程的code review方法,以供参考与探讨。如有更好的方法,欢迎交流。
1. 设置成员角色
首先需要对你团队的成员分配角色,在Gitlab groups里选择一个group,然后左边菜单栏点击 Members,可在 Members 页面添加或编辑成员角色,如下图所示。

其中角色包含如下几类:
- Guest:权限最小,基本查看功能
- Reporter:只能查看,不能push
- Developer:能push,也能merge不受限制的分支
- Master:除了项目的迁移、删除等管理权限没有,其它权限基本都有
- Owner:权限最大,包括项目的迁移、删除等管理权限
详细权限参考: https://docs.gitlab.com/ee/user/permissions.html
确定团队中技术水平、经验较好的成员为Master,负责代码的review与分支的合并;其他成员为Developer,提交合并请求,接受review意见;Master之间可以互相review。
2. 配置分支保护
在项目页面左侧菜单栏 Settings -> Repository, 进入“Protected Branches”部分配置分支保护,如下图所示。
在这里可以针对每个分支,设置允许什么角色可以merge,允许什么角色可以push,选项包括三个:“Masters”, “Developers + Masters”, “No one”。这里设置成只允许master可以直接push与merge这几个常设分支的代码。(如果更严格一点,可以将“Allowed to push”设置成“No one”)
3. 代码review流程
3.1. 开发(开发者负责)
- 本地切到develop分支, 拉取最新代码(相关命令如下,GUI工具操作自行查相关文档)
git branch #查看当前位于哪个分支,前面打星号即为当前分支
git checkout develop #切换到develop分支
git pull #拉取最新代码
- 从develop分支切出子分支
git checkout -b feature- #从当前分支切出子分支,命名为"feature-1101"
- 编码、本地自测完之后,提交子分支到远程仓库
git add * #加入暂存区
git commit -m "commit msg" #提交到本地仓库
git push origin feature- #提交到远程仓库
3.2 发起Merge请求(开发者负责)
- 在项目主页面,依次点击左侧“Merge Requests”(下图1),“New merge request”(下图2),打开新建Merge请求页面3.2 发起Merge请求(开发者负责)

- 在新建Merge请求页面,选择merge的源分支,及目标分支,如下图源分支为“feature-1101”,目标分支为“develop”,点击“Compare branches and continue”按钮进入对比与提交页面

- 在对比与提交页面,可以点击“Changes” tab查看本次修改(这里我为了演示,只是加了两个换行),确认无误,点击“Submit merge request”按钮,提交merge请求

- 提交之后,将结果页面的浏览器地址发到团队即时通讯群(如钉钉),并@相应的同事申请review
3.3 代码Review(code reviewer负责)
- 负责代码Review的同事收到申请后,点击merge请求地址,打开页面,查看“Changes”。这里可通过“Inline”单边查看,也可以通过“Side-by-side”两个版本对比查看

- review完成后,若无问题,则可点击”Merge”按钮完成merge,同时可删除对应的子分支“feature-1101”;若有问题,则可点击“Close merge request”按钮关闭该merge请求(也可以不关闭复用该merge请求),同时通知开发者进行相应调整,重新提交代码发起merge请求(如果之前没关闭merge请求,则刷新即可看到调整)。
3.4 冲突解决(开发者负责)
- merge的时候,可能存在代码冲突,这时,开发者可从develop分支重新拉取最新代码进行本地merge, 解决冲突后重新提交代码进行review
git pull origin develop #在当前子分支拉取develop分支的最新代码进行本地merge # 解决冲突代码 # 提交
git add *
git commit -m "fix merge conflict"
git push origin feature-
- 自行解决不了时,寻求协助
4. 借助阿里钉钉机器人来改善体验
前面流程中提醒code reviewer是需要开发者自己来发消息通知的,可不可以把这个流程自动化。我们可以借助Gitlab的webhook与钉钉机器人来实现。
- 在钉钉群右上角点击“…”,打开群设置,群机器人中点击添加机器人,会显示可以添加的机器人类型,如下图所示

- 选择Gitlab,点击添加,输入机器人名称,如“Gitlab”,点击完成即创建了一个Gitlab的钉钉机器人。回到“群机器人”窗口,将能看到刚刚创建的Gitlab机器人,如图

点击齿轮按钮,进入设置页,可看到webhook地址,点击复制,复制该机器人的webhook地址。如图

- 在Gitlab项目主页进入 Settings -> Integrations, 将前面复制的webhook地址填入URL中,Trigger 部分选择“Merge request events”(不要勾太多,不然提醒太多就有点骚扰了),然后点击“Add webhook”就完成了。如图

- 当有开发人员提交merge请求时,钉钉机器人将在钉钉群里发出通知,code reviewer点击消息里的链接即可进入页面进行code review, review完成,将分支merge之后,钉钉机器人也会发出消息(所有merge相关的事件都会发出消息)。如图

5. 总结
团队协作,流程、规范很重要,不同的团队可能有不同的适用流程与规范。此文分享了基于Gitlab与阿里钉钉群机器人的代码review流程,希望对团队研发协作有一定参考价值,也欢迎一起探讨、交流。
我的个人博客地址:http://blog.jboost.cn
我的微信公众号:jboost-ksxy
————————————————————————————————————————
欢迎关注我的微信公众号,及时获取最新分享
研发团队如何借助Gitlab来做代码review的更多相关文章
- Gitlab来做代码review
Gitlab来做代码review 代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现 ...
- 是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。
看了 Pivotal 公司的发展历史,这尼玛就是一场商业大片呀. 我们刚开始学习 Spring Boot 的时候肯定都会看到这么一句话: Spring Boot 是由 Pivotal 团队提供的全新框 ...
- 如何使用Git提高研发团队工作效率?
为什么使用Git 随着互联网时代的来临与发展,尤其分布式开发的大力引入,对于开发工程师来说,代码管理变成了头等难题.10多个人或者更多的成员的研发团队如何管理同一份代码,异地办公如何跟同事有效的维护同 ...
- 中小型研发团队架构实践:任务调度Job
一.Job 简介 Job 类似于数据库中的作业,多用于实现定时执行任务.适用场景主要包括定时轮询数据库同步.定时处理数据.定时邮件通知等. 我们的 Job 分为操作系统级别定时任务 WinJob 和 ...
- 【转帖】是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。
是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了. 2019/01/03 http://www.ityouknow.com/springboot/2019/01/03/spr ...
- 关于远程办公,微软MVP 15年研发团队的经验分享
今天是2月5日,春节假期结束后的第三天了.为了能够应对来势汹汹的疫情,众多互联网企业纷纷开启了远程办公模式.不知道各团队前两天的远程办公效果如何,我们 Worktile 管理层在大年初四就开始讨论远程 ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- 百人研发团队的难题:研发管理、绩效考核、组织文化和OKR
分享一个公司规模近200,研发占一半的创业公司 Worktile 在研发团队管理方面的玩法,仅供百人左右研发团队参考~ 什么是研发团队?简单的说,你熟悉的那帮穿格子衬衫,以程序员为核心组成的团队,就是 ...
- [chrome插件分享] gitlab-tree 更方便的浏览Gitlab上的代码
说明 经常玩Github的人肯定都知道大名鼎鼎的octotree吧,这款chrome插件可以说是浏览代码的神器,利用左侧的树形菜单可以很方便的打开目录.浏览文件等,加上Github全站本身使用了pja ...
随机推荐
- 2017最好的JavaScript框架、库和工具 — SitePoint
与开发者数量相比,可能有更多的JavaScript框架.库和工具.截止到2017年5月,在GitHub上快速搜索能搜到超过110万的JavaScript项目. 在npmjs上有50万的可用包,并且这些 ...
- tomcat defaultServlet
首先所有的请求进入tomcat,都会流经servlet,如果没有匹配到任何应用指定的servlet,那么就会流到默认的servlet. 默认的servlet是配置在$catalina/conf/web ...
- [论文]A Link-Based Cluster Ensemble Approach for Categorical Data Clustering
http://www.cnblogs.com/Azhu/p/4137131.html 这篇论文建议先看了上面这一遍,两篇作者是一样的,方法也一样,这一片论文与上面的不同点在于,使用的数据集是目录数据, ...
- zoj 3471 Most Powerful (有向图)最大生成树 状压dp
题目链接 题意 \(N\)种气体,\(i\)气体与\(j\)气体碰撞会: 产生\(a[i][j]\)的威力: 导致\(j\)气体消失. 求产生威力之和的最大值. 思路 和前几题找图上路径的题不一样,该 ...
- [wxPython学习]wx.CallAfter和wx.FutureCall
[wxPython学习]wx.CallAfter和wx.FutureCall 今天才学到的两个wxPython中的函数:wx.CallAfter和wx.FutureCall.这是两个无关的函数,但又多 ...
- Scrapy笔记:CrawSpider中rules中的使用
scrapy.spiders.crawl.CrawlSpider类的使用 这个类比较适用于对网站爬取批量网页,相比于Spider类,CrawlSpider主要使用规则(rules)来提取链接 rule ...
- uva 1611:Crane(构造 Grade D)
题目链接 题意: 一个序列,你可以选择其中偶数长度的一段,然后中间切开,左右两段交换.现给你一个1~n的某个排列,求一个交换方案,使得排列最终有序.(交换次数 < 9^6) 思路: 从左到右,依 ...
- springBoot 数组增加工具类包
1.pom中加入依赖 <!--数组工具类 start--> <dependency> <groupId>org.apache.commons</groupId ...
- AC日记——集合位置 洛谷 P1491
集合位置 思路: 次短路: 先走一遍最短路: 记录最短路径,然后依次删边走最短路: 最短的长度就是次短路: 来,上代码: #include <queue> #include <cma ...
- TP5 多条件whereOr查询
问题背景:最近在用ThinkPHP 5开发项目的过程中,发现根据筛选条件做or查询的时候,连贯操作不可以使用where进行条件查询了. 首先列出一个user数据表的信息: uid uname grad ...