Gitlab来做代码review
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-1101 #从当前分支切出子分支,命名为"feature-1101" 
- 编码、本地自测完之后,提交子分支到远程仓库
git add * #加入暂存区 
 git commit -m "commit msg" #提交到本地仓库
 git push origin feature-1101 #提交到远程仓库
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-1101 
- 自行解决不了时,寻求协助
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
我的头条空间: https://www.toutiao.com/c/user/5833678517/#mid=1636101215791112
Gitlab来做代码review的更多相关文章
- 研发团队如何借助Gitlab来做代码review
		代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现有工具在团队内部形成代码revie ... 
- 部署代码review和CI
		公司原先搭了一个代码Review的服务器,由于历史原因,装的是一个32bit的Ubuntu系统,后来由于需要,需要安装gitlab,由于gitlab需要64位系统,所以临时凑合了个vagrant,本质 ... 
- 敏捷开发:代码Review
		热情高涨 代码走查作为一种流程形式,起初大家的参与热情非常高涨. 因为,自己可以学习到别人一些巧妙的思想,自己的代码和习惯都暴漏出来. 这个过程中不断地吸收和改正. 但是...... 我们一开始组织的 ... 
- 我们是怎么做Code Review的
		前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ... 
- 大家是怎么做Code Review的?
		先说说我们公司现在的做法,一个团队被人为地分为两个阵营:Senior Developers和Junior Developers,比例差不多是1:1,Senior Developers就担负着对Juni ... 
- [chrome插件分享] gitlab-tree 更方便的浏览Gitlab上的代码
		说明 经常玩Github的人肯定都知道大名鼎鼎的octotree吧,这款chrome插件可以说是浏览代码的神器,利用左侧的树形菜单可以很方便的打开目录.浏览文件等,加上Github全站本身使用了pja ... 
- Gerrit代码Review入门实战
		代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ... 
- 如何在python脚本开发做code review
		在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ... 
- 前端代码质量保障之代码review
		经验丰富的程序员和一般程序员之间的最大区别,不仅体现在解决问题的能力上, 还体现在日常代码的风格上.掌握一门技术可能需要几月,甚至几周就够了. 好的习惯风格养成却需数年. 团队成员之间需要合作,代码需 ... 
随机推荐
- Using AntiForgeryToken make it better
			原文发布时间为:2011-09-01 -- 来源于本人的百度文章 [由搬家工具导入] http://weblogs.asp.net/srkirkland/archive/2010/04/14/guar ... 
- 自动合并多个文件如js css等 可以增加效率
			原文发布时间为:2011-01-13 -- 来源于本人的百度文章 [由搬家工具导入] 原文地址:http://www.codeproject.com/KB/aspnet/HttpCombine.asp ... 
- derby数据库的一些总结
			本文主要是针对在osgi开发过程中的一些问题进行总结,其中dbcp数据源的配置是在SpringDM下配置的.一,derby数据源的内嵌模式 该模式的主要应用是嵌入式程序,因为其小巧,且不 ... 
- Berkeley DB使用SecondKey给数据排序的实现方法
			Berkeley DB使用SecondKey给数据排序的 实现方法是本文我们主要要介绍的内容,在做项目的时候用到了nosql数据库BDB,借此机会研究了一下它的用法.它的官方示例和文档比较丰富,感觉比 ... 
- python字符串加密与反解密
			在生产中会遇到很多情况是需要加密字符串的(如访问或存储密码)这些需求造就了需要字符串加密,以及反解密的问题,推荐两种方法来实现,下附代码: #!/usr/bin/env python3 # -*- c ... 
- android中Adapter适配器的讲解
			Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适的形式显示在View中给用户看.Adapte ... 
- C#TreeView读取Xml,TreeView导出到Xml
			实现功能有1.根据Xml生成TreeView2.双击修改节点3.右键添加子节点或添加要节点4.右键删除当前选择的节点5.将修改后的TreeView重新生成Xml文档 其实这个主要是实现 了Xml生成T ... 
- Codeforces 632F Magic Matrix(bitset)
			题目链接 Magic Matrix 考虑第三个条件,如果不符合的话说明$a[i][k] < a[i][j]$ 或 $a[j][k] < a[i][j]$ 于是我们把所有的$(a[i][j ... 
- Jackson是线程安全的吗
			网上说是线程安全的,内部代码用了ThreadLocal.Synchronized这些线程安全类和关键字,可以放心的用. 避免每次使用都new一个,全局配置一个ObjectManager的对象将大大减少 ... 
- http重定向https
			server { listen 80; server_name localhost; return 301 https://$host$request_uri; } server { listen 4 ... 
