基于GitLab的Code Review教程或指南

一、前言

1、本文主要内容

  • GitLab Code Review机制说明
  • Git Workflow 与 Git Code Review Workflow
  • GitLab Code Review 配置说明
  • GitLab Code Review 流程演示
  • GitLab For IDE 插件介绍(JetBrains等等)

2、GitLab Code Review机制

GitLab可以在分支合并的时候支持两种方式:

  1. 在本地将源分支(Source branch)代码合并到目标分支(Target branch)然后Push到目标分支(Target branch)
  2. 将源分支(Source branch)Push到远端,然后在GitLab指定目标分支(Target branch)发起Merge Request,对目标分支(Target branch)拥有Push权限的用户执行Merge操作,完成合并。

也就是说,使用GitLab进行Code Review就是在分支合并环节发起Merge Request,然后Code Review完成后将代码合并到目标分支。

3、本教程适用环境信息

工具/环境 版本
GitLab GitLab.com、GitLab 社区版皆可
IDE JetBrains(IntelliJ IDEA、PyCharm、PhpStorm、WebStorm、RubyMide、AppCode、CLion、GoLand、DataGrip、Rider、Android Studio等等)

虽然Code Review不一定非要结合IDE来做,但是也不得不感谢JetBrains开发了几乎覆盖所有主流编程语言的IDE

JetBrains Tools目前覆盖的主流语言有:C/C++、C#、DSL、F#、Go、Groovy、Java、JavaScript、TypeScript、Kotlin、Objective-C、PHP、Python、Ruby、Scala、SQL、Swift、VB.NET(排名不分先后)

二、GitLab Code Review 配置

1、Code Review 工作流

  • 通用Git工作流说明
image
  1. 需求确认后,从master创建develop分支
  2. 开发人员从develop分支创建自己的feature分支进行开发
  3. master分支发生变更,需要从master分支合并到develop分支、可以考虑定期合并一次
  4. feature分支合并到对应的develop分支之前,需要从develop分支合并到feature分支
  5. feature分支合并到对应的develop分支之后,发布到测试环境进行测试
  6. develop分支在测试环境测试通过之后,合并到release分支并发布到预发布环境进行测试
  7. release分支在预发布环境验证通过后,合并到master分支并发布到生产环境进行验证

分支名称约定:

分支类型 名称格式 说明
Master master 有且只有一个
Release release-* *可以是班车发布日期也可以是需求名称缩写,也可以根据需要只用一个release分支
Develop develop-* *通常是班车发布日期或者需求名称缩写
Feature feature-{username}-* 开发人员个人分支
  • Code Review 环节选定

以上述Git工作流为例,开发人员在Feature分支进行开发,开发完成后Merge到Develop分支进行测试。

那么最适合做Code Review就是Feature分支合并到Develop分的环节。

image

2、GitLab Repository 配置

GitLab仓库相关配置以gitlab.com为例,本篇内容如果没有特别注明,也同样适用于私有化部署的GitLab CE版本

  • GitLab新建仓库&创建分支
image

仓库地址:https://gitlab.com/ken-io/test

image

新建分支:
release(from master)
develop-test(from master)、
feature-ken-test(from develop-test)

  • Protected Branches 配置

为了保证必须以Merge的方式变更develop分支、release分支、以及master分支,我们需要对Push以及Merge权限进行限制

菜单:Settings->Repository Settings然后展开Protected Branches选项
https://gitlab.com/ken-io/test/settings/repository

gitlab-codereview-settings-protected-branches.png

这里,我们限制分支,所有的开发人员对develop分支、release分支、以及master分支均无Push权限,只能以Merge方式合并到对应分支,而且只有Maintainers(Masters)组的用户有Merge权限。

对于通配符的分支保护,我们需要给Maintainers(Masters)组的用户Push权限,不然无法新建对应格式的分支。对于固定名称的分支:master、release,可以限制所有角色都没有Push权限。

三、GitLab Code Review 示例

  • 变更Feature分支

在线修改feature-ken-test分支README.md文件,为Merge Request提供基础

image

这里随意更新一行内容,然后Commit changes即可。

  • 创建Merge Request

菜单:Merge Requests,然后点击:New Merge Request

image

Source branch选择:feature-ken-test
Target branch选择:develop-test
然后:Compare branches and continue

image

操作项/填写项说明:

操作项/填写项 ken.io 的说明
Title 标题,没有特殊要求保持默认即可
Description 描述,需要将变更的需求描述清楚,最好附件Code Review要点
Assignee 分配到的人,被分配到的人将会收到邮件通知,跟Merge权限没有必然关系,仍然是项目的Maintainers(Masters)角色拥有Merge权限
Milestone 里程碑,如果没有可不选
Label 标签,如果没有可不选
Approvers user 批准人/审批人,必须为项目所在组成员,如果选择了批准人,那此次合并必须经由批准人批准
Approvers group 批准人组,方便同时选择多个批准人
Approvals required 最少批准个数,如果选了个3个批准人,Approvals required设置为1,那么只需要1个批准人批准即可
Source branch 源分支,跟上一步骤选择一致,这里主要用于确认
Target branch 目标分支,跟上一步骤选择一致,这里主要用于确认

Approvers选项暂不适用于Gitlab的最新稳定版(11.1.4),期望后续可以支持。
这里填写好Description,选择Assignee,然后Submit merge request即可。

  • Merge Request 操作

[站外图片上传中...(image-3f6069-1536737759058)]

Merge Request 创建之后就会转到该页面,被分配到的人(Assignee)会收到邮件提醒,如果需要多个人进行 Code Review,只要将该页面的链接发给其他项目成员即可。项目成员可以查看变更并评论,只不过按照之前的配置,只有Maintainers(Masters)角色的成员才有Merge的权限。

image

在Changes选项卡中,我们可以看到所有的变更。将光标移动到行号处会出现评论按钮,我们可以点击评论按钮发起评论,这个评论是对项目成员可见的,大家可在讨论区进行讨论。最终讨论发起者有权将讨论标记为已解决resolved

image

当所有的问题已解决之后(如果选择了审批人也需要审批通过),Maintainers(Masters)成员点击Merge完成合并即可。

image

Merge完成之后,可以选择Remove Source Branch等操作。

develop分支合并到release分支,以及elease分支合并到master是不需要经过Code Review的,直接Merge即可。这里就省略了。

四、IDE Merge Request 插件使用介绍

前面介绍了通过GitLab网页创建Merge Request并发起Code Review,但作为开发人员,还是结合IDE来使用会更顺手,GitLab提供了相关的api,只要我们创建响应的token,就可以供IDE插件来访问GitLab,以便使用IDE代替在网页上操作。

1、GitLab Access Token

菜单:User Settings->
Access Tokens 进入Access Token添加页面

image
说明
Name 名称,根据自己喜好来即可
Expires at 过期时间,最远可以选择到10年后,根据自己需要填写即可
Scopes 范围,这里选择api就够用了

创建完成后,麻烦暂时保存token。因为一旦刷新或者重开页面,token就不可见了。

2、JetBrains IDE GitLab插件使用

JetBrains提供了诸多IDE:IntelliJ IDEA、PyCharm、PhpStorm、WebStorm、RubyMide、AppCode、CLion、GoLand、DataGrip、Rider、Android Studio等等,如无意外,都适用GitLab插件。

安装以下两个插件即可:
Gitlab Projects:https://plugins.jetbrains.com/plugin/7975-gitlab-projects
Gitlab Integration:https://plugins.jetbrains.com/plugin/7319-gitlab-integration

  • 安装GitLab插件

Settings->Plugins 进入Plugins管理页

image

点击Browse repositories并搜索gitlab

image

安装Gitlab Projects以及Gitlab Integration,然后重启IDE生效

  • 配置GitLab

在Settings界面搜索GitLab Settings

image

填写GitLab Server Url、Access Token,然后点击Add New One完成添加
如果是私有化部署的GitLab,换成对面的域名或者IP+Port即可

  • Create Merge Request

Clone项目feature-ken-test分支到本地,变更后push到origin。
然后在菜单中选择:VCS->Git->Git Lab-> Create Merge Request

image

这里相当于我们在GitLab网页上进行创建操作,只不过少了一些选项,也暂不支持Approvers相关选项。
选择目标分支,被分配的人,填写好Title、Description然后点击OK即可。
Merge Request创建完成后,插件会在右下角提示,点击链接即可跳转到Merge Request页面

如果提示冲突,请先将目标分支代码合并到当前分支

  • Merge Request Manage

项目成员在菜单中选择:VCS->Git->Git Lab-> List Merge Request

image

在这里可以看到待处理的Merge Request,选中后点击Code Review就可以呼出Merge Request操作面板

image
按钮 说明
Diff 查看所有变更文件及差异
Comments 查看、添加评论
Assign to me 将跟进人指给自己
Merge 执行Merge
  • Merge Request Diff

Diff界面说明:

image

左侧是本次合并的commit记录,右侧是本次合并的文件。双击对应文件即可查看差异明细

image
  • Merge Request Comments
image

Comments界面可以查看指定Merge Reuqest评论信息,也可以添加评论,双击可以查看完整评论内容。
但是不支持针对代码行发起讨论、对讨论标记为已解决等。


GitLab插件还是更适用于Create Merge Request、或者对于较为简单的提交进行Code Review。如果需要讨论等功能,还是建议在GitLab页面上进行操作

3、其他IDE GitLab插件使用

  • Visual Studio

Visual Studio GitLab插件:https://marketplace.visualstudio.com/items?itemName=MysticBoy.GitLabExtensionforVisualStudio

  • Visual Studio Code

Visual Studio Code GitLab插件:https://marketplace.visualstudio.com/items?itemName=jasonn-porch.gitlab-mr

  • Atom

Atom GitLab 插件:https://atom.io/packages/gitlab

五、备注

  • 延伸阅读

GitLab安装部署教程:https://ken.io/note/centos7-gitlab-install-tutorial


本文首发于我的独立博客:https://ken.io/note/gitlab-code-review-tutorial

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • GitLab 是一个基于 git 的仓库管理程序,也是一个方便软件开发的强大完整应用。 GitLab 拥有一个“用...
    weihongyu12阅读 20,919评论 2 26
  • 今天我阅读了《精灵鼠小弟》这本书。 第三天白天,中介小哥来帮忙,陪着我听老鼠。。。。 他的什么黏鼠板,老鼠笼的主义...
    燕麦雪里藏阅读 218评论 0 0
  • 生活總是這個熊樣子 千溝萬壑里沒有想要的詩 遇到沒有外殼的愛情總會被腐蝕 離開了熱鬧的大都市 離開了我灰頭土臉的現...
    字丁一阅读 163评论 0 1
  • 如果可以 我愿意 一路行摄 一路书写 脚步莫匆匆 不要辜负这座城市难得的一片蓝 据说去年这个时候这座城市可不这样 ...
    漫漫无忧阅读 177评论 8 5