在这里插入图片描述


gerrit是一个基于git仓库的代码评审工具,项目管理工具。


关键词: gerrit 开源 免费 代码评审工具 free opensource code review 基于git仓库


1. 简介

Gerrit分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android。提供网页界面,让同一个团队的开发能够彼此review代码,并决定是否提交代代码仓库,gerrit内置了一个简易的git来完成这些工作。

1.1 Code Review

为什么要Code Review

  • code review是质量的有力武器, 及时发现代码问题,一遍编码难免留下各种bug,包括疏忽,遗漏,笔误,思维,逻辑,规范等各个方面,而code review是发现问题的有效方式。
  • 代码质量到底怎么样,客观的看来,对于资深且高素质程序猿,在固有思维模式下,发现自身所有的问题是很难的,而他人从不同的思维模式去code review,有机会发现更多问题,查漏补缺。“自己检查”对比“自己检查+他人检查”,结果显而易见。
  • 落地编码规范、质量,如何将厚厚的一本编码规范落实到日常编码中,怎么样检查,怎么样落实,code review都是重要的一道关卡。
    从侧面来看
  • 态度。如果developer知道自己的代码要被别人查看、评审、理解、研究的话,大多数人都会按照要求、努力写好代码,从而得到别人的认可,而不是完成编码就行,这是完全不同的编码态度。
  • 备份。日常开发中都是一个人负责一个功能或者一个模块,而他人对代码的code review,不说了解代码的细节,至少大体逻辑和架构是了解的,这样由一个人了解代码变为两个人了解代码。
  • 培养编码习惯,久而久之的代码review,修改问题,帮助developer坚持、改进,良性发展,形成良好的编码习惯
  • 更好的引导新员工,review帮助新员工适应编码习惯,健康成长。

为什么要使用工具推进code review

  • 流程化,编码,代码版本管理,持续集成,持续交付,都有简单有效且熟悉的固有流程,code review工具将code review也加入到开发流程中。
  • 强制要求,在开发流程中强制要求进行code review,落实质量管理
  • 提高效率,在review过程中的提交、review、记录、驳回、审批环节提供可视化工具,辅助review的各个环节,对比没有工具时的review活动,提高效率。
  • 集成现有工具,通常是与版本库,IDE,持续集成工具集成,带来少量的变化感知。

而gerrit就是code review活动中,强有力的工具,帮助我们更好的开展code review工作


1.2 代码流程

通过一张图来了解编码活动中的流程
在这里插入图片描述

  • 在没有持续集成工具之前,我们的代码是红色箭头标注的那样,直接push远程git仓库,对于质量活动,没有任何流程性,强制性要求,完全靠程序猿的素质和主观能动性,效果可想而知。
  • 在有持续集成工具之后,持续集成工具帮助我们进行代码构建,代码静态检查、自动化测试这些有效的质量活动,然而持续集成活动是被动的,程序猿提交后采取执行质量活动,不能强制要求developer修改问题再push到git仓库,而且代码静态检查的问题远远不够。
  • 在有git仓库、gerrit代码review工具、持续集成工具后,编码流程如图所示
    1. developer提交到gerrit
    2. 持续集成工具jenkins进行质量活动,成功后,返回校验信息到gerrit
    3. code reviewer进行code review活动,检查问题,标识问题,并决定是否提交到代码仓库
    4. code review活动通过之后,代码同步到远程仓库

1.3 优势

gerrit通过以下方面措施,提高代码质量

  • 强制要求
    提交代码前,强制要求进行代码监视
  • 集成CI&CD,git仓库
    和现有的CI&CD工具集成,和git仓库集成,将code review工作编码流程中
  • 可视化界面
    提供简单易用的可视化操作界面
  • 添加行内注释
    支持在review过程中添加行内注释,标注解释问题,辅助review工作更好开展
  • 简单的review流程
    简单易用的操作流程,在增加code review工作后,对原有的开发流程影响较小

1.4 缺点

  • 安装配置比较复杂
  • 界面比较简陋
  • 纯英文操作界面

2. 安装

因为整个流程要是用到gitlab,gerrit,jenkins,所在在安装阶段需要安装三个工具。

2.1 安装gerrit

选择版本,下载gerrit安装包,下载地址为https://gerrit-releases.storage.googleapis.com/,如选择2.12.2版本安装,则下载链接如下:

$ wget https://gerrit-releases.storage.googleapis.com/gerrit-2.12.2.war

初始化gerrit

$ java -jar gerrit-2.12.2.war init -d /home/work/gerrit/data

根据如下配置gerrit

$ java -jar gerrit-2.12.2.war init -d /home/work/gerrit/data
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore

*** Gerrit Code Review 2.12.2
*** 


*** Git Repositories
*** 

Location of Git repositories   [git]: #设置本地git仓库地址,默认在安装目录下

*** SQL Database	#设置数据库相关配置
*** 

Database server type           [mysql]: mysql # 选择mysql
Server hostname                [172.17.0.2]: 172.17.0.3 # mysql host
Server port                    [3306]:3306 # 数据库端口 
Database name                  [gerrit]:  # 数据库名称
Database username              [root]: 	# 数据库用户
Change root s password         [y/N]?  # 数据库用户密码

*** Index
*** 

Type                           [LUCENE/?]: #索引类型

The index must be rebuilt before starting Gerrit:
  java -jar gerrit.war reindex -d site_path

*** User Authentication  #用户验证方式
*** 

Authentication method          [OPENID/?]: http # 使用http方式认证
Get username from custom HTTP header [y/N]? 
SSO logout URL                 : 

Enable signed push support     [y/N]? y    # 使用登录推送

Gerrit Code Review is not shipped with Bouncy Castle Crypto OpenPGP v152
**  This library is required for your configuration. **
Download and install it now [Y/n]? Y
Downloading http://www.bouncycastle.org/download/bcpg-jdk15on-152.jar ... Failed to clean up lib: /home/work/gerrit/data/lib/bcpg-jdk15on-152.jar
 !! FAIL !!


error: http://www.bouncycastle.org/download/bcpg-jdk15on-152.jar: 302 Found
Please download:

  http://www.bouncycastle.org/download/bcpg-jdk15on-152.jar

and save as:

  /home/work/gerrit/data/lib/bcpg-jdk15on-152.jar

Press enter to continue  # 下载错误的情况下,只许离线现在,并且放置在响应目录下即可
Checksum bcpg-jdk15on-152.jar OK

*** Review Labels
*** 

Install Verified label         [y/N]? y # 是否安装Verified label,选择y

*** Email Delivery #电子邮件配置
*** 

SMTP server hostname           [ichinae.com]: smtp.exmail.qq.com #邮件服务
SMTP server port               [(default)]: 465	#邮件端口
SMTP encryption                [NONE/?]: SSL/TLS #加密方式
error: 'SSL/TLS' is not a valid choice
       Supported options are:
         none
         ssl
         tls
SMTP encryption                [NONE/?]: ssl
SMTP username                  [weihao1288]: #用户名称
Change weihao1288's password   [y/N]?  # 密码

*** Container Process
*** 

Run as                         [root]: 
Java runtime                   [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre]: 
Upgrade /home/work/gerrit/data/bin/gerrit.war [Y/n]? Y
Copying gerrit-2.12.2.war to /home/work/gerrit/data/bin/gerrit.war

*** SSH Daemon
*** 

Listen on address              [*]:  # ssh监听地址
Listen on port                 [29418]: # ssh端口

*** HTTP Daemon
*** 

Behind reverse proxy           [Y/n]? Y #询问是否支持反向代理,选择Y
Proxy uses SSL (https://)      [y/N]? N #是否使用ssl加密,N
Subdirectory on proxy server   [/]:  #设置子目录位置,默认为根目录即可
Listen on address              [*]:  #服务监听地址
Listen on port                 [8081]: #服务监听端口
Canonical URL                  [http://localhost/]: #服务URL g^Hhtt^H^H^H^H^Hfds^Hafd^Hsa^Hfds^Haf^Hdsa

*** Plugins
*** 
# 安装其他依赖
Installing plugins.
Install plugin singleusergroup version v2.12.2 [Y/n]? Y
version v2.12.2 is already installed, overwrite it [Y/n]? Y
Install plugin commit-message-length-validator version v2.12.2 [Y/n]? Y
version v2.12.2 is already installed, overwrite it [Y/n]? Y
Install plugin reviewnotes version v2.12.2 [Y/n]? Y
version v2.12.2 is already installed, overwrite it [Y/n]? Y
Install plugin replication version v2.12.2 [y/N]? Y
Install plugin download-commands version v2.12.2 [Y/n]? Y
version v2.12.2 is already installed, overwrite it [Y/n]? Y
Initializing plugins.
No plugins found with init steps.

Initialized /home/work/gerrit/data

启动gerrit

$ ./gerrit.sh start
Starting Gerrit Code Review: OK
$ netstat -anp |grep Gerrit
tcp6       0      0 :::29418                :::*                    LISTEN      11198/GerritCodeRev 
tcp6       0      0 :::8081                 :::*                    LISTEN      11198/GerritCodeRev 
tcp6      32      0 192.168.10.63:44130     162.213.33.159:443      CLOSE_WAIT  11198/GerritCodeRev 
tcp6      32      0 192.168.10.63:44136     162.213.33.159:443      CLOSE_WAIT  11198/GerritCodeRev 
tcp6      32      0 192.168.10.63:44134     162.213.33.159:443      CLOSE_WAIT  11198/GerritCodeRev 
unix  2      [ ]         STREAM     CONNECTED     1558939  11198/GerritCodeRev  
unix  2      [ ]         STREAM     CONNECTED     1558941  11198/GerritCodeRev

常见问题

com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) No index versions ready; run Reindex

执行下面命令,重新索引

$ java -jar gerrit-2.12.2.war reindex -d /home/work/gerrit/data/

通过网页访问gerrit管理页面,通过访问http://{user ip}:8080来打开gerrit管理页面,如:

在这里插入图片描述


2.2 安装jenkins和gitlab

此部分请参考其他关于jenkins和gitlab的文档。

3.Gerrit配置

3.1 Gerrit配置文件

配置文件
在gerrit 初始化完成之后,会生成gerrit运行的配置和数据文件,其中就有gerrit的配置文件,也可以通过修改配置文件,来配置gerrit正确运行,配置文件在=={gerrit home}/etc/==目录下。一个典型的配置文件如下:

[gerrit]
        basePath = git #git仓库的位置
        canonicalWebUrl = http://192.168.10.63:8080/ #gerrit服务访问地址
        serverId = 5dbff242-cfa2-499b-887d-93c018e5f8cb #gerrit服务ID
[database]
        type = mysql # 数据库类型
        hostname = 172.17.0.3 # mysql host
        port = 3306 # mysql服务端口
        database = gerrit #mysql数据库名称
        username = root #mysql用户名
[index]
        type = LUCENE #索引类型
[auth]
        type = OPENID #认证方式
[receive]
        enableSignedPush = true 
[sendemail] #邮件相关配置
        smtpServer = smtp.exmail.qq.com 
        smtpUser = weihao1288
        smtpServerPort = 465
        smtpEncryption = SSL
[container]
        user = root
        javaHome = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
[sshd] # ssh监听地址和端口
        listenAddress = *:29418
[httpd] # httpd监听地址和端口
        listenUrl = proxy-http://*:8081/
[cache] #缓存目录
        directory = cache
[plugins]
	allowRemoteAdmin = true # 允许远程通过ssh管理gerrit

3.2 Gerrit用户认证

3.2.1 Gerrit用户认证方式

openId
gerrit默认的用户鉴权方式,使用支持OpenID的认证源(如 Google、Yahoo!)进行身份认证,此模式支持用户自建帐号,用户通过OpenID 认证源的认证后,Gerrit 会自动从认证源获取相关属性如用户全名和邮件地址等信息创建帐号。
如果是开放服务的Gerrit服务,使用OpenId认证是最好的方法,就像谷歌Android项目的代码审核服务器配置的那样。任何人只要在具有OpenId provider的网站上(如Google、Yahoo等)具有帐号,就可以直接通过OpenId注册,Gerrit会在用户登录OpenId provider网站成功后,自动获取(经过用户的确认)用户在OpenId provider站点上的部分注册信息(如用户全名或者邮件地址)在Gerrit上自动为用户创建帐号。
LDAP模式
如果有可用的 LDAP 服务器,可以直接使用LDAP 中的已有帐号进行认证,不过此认证方式下 Gerrit 的自建帐号功能是关闭的。
如果架设有LDAP服务器,并且用户帐号都在LDAP中进行管理,那么采用LDAP认证也是非常好的方法。登录时提供的用户名和口令通过LDAP服务器验证之后,Gerrit会自动从LDAP服务器中获取相应的字段属性,为用户创建帐号。创建的帐号的用户全名和邮件地址因为来自于LDAP,因此不能在Gerrit更改,但是用户可以注册新的邮件地址。
在配置LDAP认证时遇到了一个问题就是创建帐号的用户全名是空白,这是因为在LDAP相关的字段没有填写的原因。如果LDAP服务器使用的是OpenLDAP,Gerrit会从displayName字段获取用户全名,如果使用Active Directory则用givenName和sn字段的值拼接形成用户全名。
HTTP模式
此认证方式需要配置 Apache 的反向代理,并在Apache 中配置 Web 站点的口令认证,通过口令认证后Gerrit 在创建帐号的过程中会询问用户的邮件地址并发送确认邮件。
Gerrit还支持使用HTTP认证,这种认证方式需要架设Apache反向代理,在Apache中配置HTTP认证。当用户访问Gerrit网站首先需要通过Apache配置的HTTP Basic Auth认证,当Gerrit发现用户已经登录后,会要求用户确认邮件地址。
当用户邮件地址确认后,再填写其他必须的字段完成帐号注册。HTTP认证方式的缺点除了在口令文件管理上需要管理员手工维护比较麻烦之外,还有一个缺点就是用户一旦登录成功后,想退出登录或者更换其他用户帐号登录变得非常麻烦,除非关闭浏览器。
关于切换用户有一个小窍门:例如Gerrit登录URL为https://server/gerrit/login/,则用浏览器访问https://nobody:wrongpass@server/gerrit/login/,即用错误的用户名和口令覆盖掉浏览器缓存的认证用户名和口令,这样就可以重新认证了。
development_become_any_account
任何访问者都可以使用管理账号


可以看到openid适合于公开在的gerrit的服务,LDAP模式官方比较推荐,但是需要架设LDAP服务器,development_become_any_account不安全,所以采用http的方式,进行gerrit的认证管理。

3.2.2 配置http认证

Gerrit使用http认证,需要反向代理,选择使用最稳定、性能表现最好的nginx作为反向代理服务。
安装nginx
在官网下载nginx最新stable版本,官网:http://nginx.org/en/download.html

$ wget http://nginx.org/download/nginx-1.14.1.tar.gz

安装nginx依赖

$ yum install pcre-devel zlib zlib-devel openssl openssl-devel

配置安装nginx

$ tar -zxvf nginx-1.14.1.tar.gz
$ cd nginx-1.14.1
$ ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
$ ./configure --add-module=/usr/local/src/fastdfs-nginx-module-1.20/src/
$ make
$ make install

启动nginx,测试

$ /usr/local/nginx/sbin/nginx

通过浏览器访问http://{userIp}/端口测试nginx是否安装成功,出现如下字样说明安装成功。
在这里插入图片描述

反向代理gerrit服务
在nginx中增加配置server,反向代理gerrit服务, 配置根据实际情况可能不同,做相应修改。

server {
	# nginx服务监听端口
    listen 8888;
    server_name localhost;
    location / {
        auth_basic "welcome gerrit";
        #用户信息存储位置
        auth_basic_user_file /home/work/gerrit/data/passwd;
        #gerrit服务url
        proxy_pass http://127.0.0.1:8081/;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
    }
    location /login/ {
    	#gerrit服务url
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
    }
}

使用apache htpasswd工具添加用户
安装htppasswd工具

$ yum -y install httpd

生成用户名密码

$ htpasswd -b /home/work/gerrit/data/passwd admin admin

重新启动nginx服务、gerrit服务后测试gerrit

$ /usr/local/nginx/sbin/nginx -s reload
$ ./bin/gerrit.sh restart
Starting Gerrit Code Review: OK

使用新创建的账号admin,admin来测试gerrit,通过访问nginx代理服务http://{userIp}:{userPort}/,如访问http://192.168.10.63:8888/,如下图,输入配置的用户密码,admin/admin
在这里插入图片描述
输入后来到注册页面
在这里插入图片描述
暂不做任何操作,点击最下面的continue来到主界面
在这里插入图片描述
gerrit基础服务搭建完成


4. 配置代码审核流程

ssh keys
因为jenkins和gerrit,gerrit和gitlab,账户和gerrit,账户和gitlab都需要通信,所以需要配置公钥私钥来支持ssh免密登录。
其中,配置过程中需要的账户如下:

系统账户角色
gerritadmin管理员
gerritgerrit普通用户
gitlabweihao管理员
gitlabgerrit普通用户 Reporter
jenkinsrootjenkins管理员

其中jenkisn,gitlab,gerrit分别在三个不同的机器上,如下

系统IP
gitlab192.168.10.60
gerrit192.168.10.63
jenkins192.168.10.59

4.1 集成jenkins

4.1.1 配置Gerrit Trigger

根据代码流程,在代码提交gerrit后,gerrit触发jenkins进行构建,静态检查,自动化测试,并在jenkins构建成功之后,发给gerrit校验状态,构建成功gerrit才会发起代码检视任务,下面来配置gerrit集成jenkins完成自动构建

  1. Jenkins–>插件管理中,下载安装gerrit trriger插件
    在这里插入图片描述
  2. 配置Gerrit Trriger
    安装完成后,在系统管理中点击Gerrit Trriger进行配置,新增Gerrit Server,按照页面说明进行Gerrit 。注意,在配置Gerrit时,需要输入ssh连接Gerrit的用户和用户密钥,使用ssh-keygen工具来生成,将公钥上传到gerrit用户的sshkeys,并且将密钥复制到jenkins配置的对应目录下。
    ssh-keygen生成密钥公钥,分别生成了密钥admin,公钥admin.pub文件
$ ssh-keygen -t rsa -C admin@192.168.10.63
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): admin
admin already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in admin.
Your public key has been saved in admin.pub.
The key fingerprint is:
SHA256:WCAccwLLslSTEuqm3UTuX1iqY02J8nKY7iysQlUtXQc admin@192.168.10.63
The key's randomart image is:
+---[RSA 2048]----+
| .o=*.= .E..     |
|.o.ooB +  .      |
|o.+ o . .        |
|oo +   o         |
|.o. o...S        |
|oo.+. o+         |
|+ .=ooo .        |
|oo+ =o..         |
|++++...          |
+----[SHA256]-----+
$ ls admin*
admin  admin.pub

将公钥添加到gerrit,在setting–>SSH Public Keys–>Add Key中添加公钥
在这里插入图片描述
在jenkins中配置server,分别配置gerrit的主机IP,gerrit的管理账户admin,以及admin的私钥位置,并将私钥复制到jenkins服务器的对应位置
在这里插入图片描述

Server配置,配置完成后,点击测试gerrit,出现如下界面,其中测试连接的状态由红色变为蓝色。
在这里插入图片描述

4.1.2 配置任务

在Jenkins安装gerrit后,在jenkins创建对应的任务,其中在源码管理配置中选择git,写入gitlab中创建的项目,以及gerrit账户名称和密码,并且Branches to build指定分支时,配置为origin/$GERRIT_BRANCH,如下图:
在这里插入图片描述
安装Gerrit Trigger后,会在任务配置页面的trigger选项中会出现gerrit event选项,选择已经配置好的Gerrit Server;Trigger on选择Patchset Created,在动态触发器配置中,第一个框是项目,选择Plain,写入你的项目名,第二个框是你要监听的分支,也选择Plain,填写分支名,如master,也可以继续添加其他分支,如dev。如下图:
在这里插入图片描述
这样当master,dev分支有代码提交时触发构建。


4.2 集成gitlab

4.2.1 创建gitlab项目

使用weihao账号登录gitlab,创建项目gerrtTest,项目设置为private,这样用户就不能直接push代码到仓库中了。使用gerrit账号下载gerritTest项目到本地。

$ git config --global user.name "gerrit"
$ git config --global user.email "gerrit@192.168.10.60"
$ git clone --bare git@192.168.10.60:weihao/gerritTest.git

git clone使用–bare选项,clone提交日志信息到本地。

4.2.2 创建gerrit项目并配置Verified

在jenkins触发之后,完成构建,不管是构建失败或者构建成功,需要通知gerrit,也就是verified。此功能需要在安装gerrit的时候启用Label Verified功能,根据第2.1章步骤安装gerrit已经启动了Label Verified。
创建gerrit项目
使用admin账号,在gerrit中创建项目gerritTest,在projectName中写入项目名称gerritTest,Rights Inherit From选择All-Projects,从All-Projects集成权限配置,完成后点击Create Project
在这里插入图片描述
配置Verified
在 Project–>List–>All-Projects–>Access–>Edit中编辑访问权限,其中Reference: refs/heads/*中点击Add Permission,选择Label Verified,选择成功后,页面为
在这里插入图片描述
代码关联Gerrit
代码上传gerrit需要git-review工具,安装git-review工具和readline-devel工具

$ yum -y install git-review
$ yum install readline-devel

在clone的testGerrit项目根目录中添加文件==.gitreview==文件,内容如下,其中host为gerrit服务的主机IP,29418为gerrit服务监听的ssh端口,project指定gerrit项目

$ cd gerritTest
$ vim .gitreview
[gerrit]
host=192.168.10.63
port=29418
project=gerritTest

同时需要将当前操作系统登录账号,例如我用的是root,将root@192.168.10.63的公钥上传到gerrit,并将root@192.168.10.63的私钥命名为id_rsa,存放在/root/.ssh/目录下,用户不同,目录不同,即当前用户根目录下的.ssh目录。
然后在当前代码目录下执行git review命令即可将代码上传到gerrit

$ cd gerrit
$ git review

4.2.4 配置gerrit同步到gitlab

代码从gerrit仓库同步到gitlab仓库,需要使用到replication插件,按照第2.1章安装的gerrit已经默认增加了replication插件,如果没有装,也可以按照以下步骤安装replication插件。安装完成后会在{gerrit_home}/plugins目录下看到replication.jar

$ java -jar gerrit-2.11.3.war init -d {gerrit_home} --batch --install-plugin replication

增加配置文件
安装完成后,需要在=={gerrit_home}/etc/目录下增加replication.config==配置文件,是的replication根据配置文件来同步数据,配置文件内容如下

[remote "gerritTest"]
projects = gerritTest
url = git@192.168.10.60:weihao/gerritTest.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
threads = 3

其中projects是项目名称,url是远程gitlab仓库url,push是标记将heads,tag是,changes都同步,threads是线程数目,如果有多个项目,也可以配置多个[remote “gerritTest”]来完成多个项目的同步。
配置密钥公钥
在gerrit服务器上,设置当前运行gerrit用户的.ssh,如我用的是root,vim /root/.ssh/config,内容如下,并将密钥保存为id_rsa保存在==.ssh==目录下

Host 192.168.10.60
        User weihao
        IdentityFile ~/.ssh/id_rsa
	    PreferredAuthentications publickey

将公钥上传到git项目owner账户的weihao的ssh中,这样,当gerrit评审通过的时候就会自动同步代码到gitlab的仓库中了。
通过ssh执行gerrit命令
也可以使用ssh到gerrit执行命令,如:
重新加载replication插件

$ ssh -p 29418 admin@192.168.10.63 gerrit plugin reload replication

手动同步所有项目代码到gitlab

$ ssh -p 29418 admin@192.168.10.63 replication start --all

5. 测试流程

5.1 修改文件, 上传gerrit

在下载的testGerrit项目中修改文件,提交代码,并使用git review命令推送到gerrit服务器。

$ cd gerritTest/
$ echo "v3 test" >> version
$ git stage .
$ git commit -m 'V3'
[master d8f8ab9] V3
 1 file changed, 1 insertion(+)
$ git review
remote: 
remote: Processing changes: new: 1, refs: 1
remote: Processing changes: new: 1, refs: 1
remote: Processing changes: new: 1, refs: 1, done    
remote: 
remote: New Changes:
remote:   http://192.168.10.63:8081/6 V3
remote: 
To ssh://admin@192.168.10.63:29418/gerritTest
 * [new branch]      HEAD -> refs/for/master
$ date
2020年 11月 27日 星期五 11:32:25 CST

5.2 jenkins构建

提交成功后,发现jenkins已经在构建,并构建成功。
在这里插入图片描述


5.3 gerrit code review

使用admin登录gerrit服务,可以看到open选项卡下,有刚才提交的v3等待检视。
在这里插入图片描述
点击V3后进入检视页面,可以查看详细代码信息,添加行内注释,如下:
在这里插入图片描述
也可以点击replay完成检视,或店家Cherry Pick进行部分合入或者拒绝合入等操作。此处选择检视完成允许合入,并点击submit提交。
在这里插入图片描述


5.4 同步到gitlab

登录gitlab查看gerritTest项目,发现刚才的提交V3已经合入到gerritTest仓库。


常见问题

在上传是碰到如下错误,是因为提交信息没有带ChangeId
gitdir=$(git rev-parse --git-dir); scp -p -P 29418 admin@192.168.10.63:hooks/commit-msg ${gitdir}/hooks/
git commit --amend -m"v1"
只需要按照错误提示执行以上命令,重试,如果还不行,是因为有超过连续两个版本需要push,而前一个版本没有ChangeId,只需要git reset以前的版本,再push

$ gitdir=$(git rev-parse --git-dir); scp -p -P 29418 admin@192.168.10.63:hooks/commit-msg ${gitdir}/hooks/
$ git commit --amend -m"v1"

重载replication的同步服务

$ ssh -p 29418 admin@192.168.10.63 gerrit plugin reload replication
fatal: remote plugin administration is disabled

如果报错:fatal: remote plugin administration is disabled
在{gerrit_home}/etc/gerrit.config文件里添加下面内容:

[plugins]
allowRemoteAdmin = true

然后重启gerrit服务即可:

$ /home/gerrit/gerrit_site/bin/gerrit.sh restart
Stopping Gerrit Code Review: OK
Starting Gerrit Code Review: OK

(完,请享用)(\^_^)
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐