【Git】代码托管评审平台--gerrit|Gerrit Code Review

目录

前言

Gerrit简介

Gerrit安装

如何使用gerrit

​​​​​​​添加项目

已有项目与gerrit上建立的exist-project关联

git客户端访问gerrit

在网页完成code review

在gerrit 网页查看自己的提交记录

注意事项

gerrit的使用和配置

2. 配置Gerrit

2.1 获取账号和密码

2.2 注册邮箱

2.3 填写FullName

2.4 配置 SSH key

2.5 配置ssh下的config文件来管理ssh连接

2.6 配置git中的username和email

2.7 配置gerrit上代码commit的模板

Gerrit(2)图形介绍


前言

原文:关于Gerrit code review 介绍与安装;https://www.cnblogs.com/chenpingzhao/p/9337117.html

代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略。在实践中,给大家推荐一款免费、开放源代码的代码审查软件Gerrit。

 Code Review是什么

本地写代码 --->git push origin HEAD:refs/for/xxx推到gerrit平台托管,要请人员评审

---->评审人员code view,没有问题,点同意---->gerrit把代码push到远程仓。

Gerrit简介

Gerrit是Google为Android系统研发量身定制的一套免费开源的代码审核系统,它在传统的源码管理协作流程中强制性引入代码审核机制,通过人工代码审核和自动化代码验证过程,将不符合要求的代码屏蔽在代码库之外,确保核心代码多人校验、多人互备和自动化构建核验。

Gerrit之前的系统架构:

Gerrit之后的系统架构:

通过Gerrit机制将代码做分隔。

Gerrit适用性

几乎任何需要正式发布的项目都应当使用Gerrit来进行代码审查,如果Team中有新人,必须使用Gerrit确保代码质量。

工作流程

使用过git的同学,都知道,当我们git add --> git commit --> git push 之后,你的代码会被直接提交到repo,也就是代码仓库中,就是图中橘红色箭头指示的那样。

那么gerrit就是上图中的那只鸟,普通成员的代码是被先push到gerrit服务器上,然后由代码审核人员,就是左上角的integrator在web页面进行代码的审核(review),可以单人审核,也可以邀请其他成员一同审核,当代码审核通过(approve)之后,这次代码才会被提交(submit)到代码仓库(repo)中去。

无论有新的代码提交待审核,代码审核通过或被拒绝,代码提交者(Contributor)和所有的相关代码审核人员(Integrator)都会收到邮件提醒。


gerrit还有自动测试的功能,和主线有冲突或者测试不通过的代码,是会被直接拒绝掉的,这个功能似乎就是右下角那个老头(Jenkins)的任务。

整个流程就是这样。 在使用过程中,有两点需要特别注意下:

  1. 当进行commit时,必须要生成一个Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒。
  2. 提交者不能直接把代码推到远程的master主线(或者其他远程分支)上去。这样就相当于越过了gerrit了。 gerrit必须依赖于一个refs/for/*的分支。

    假如我们远程只有一个master主线,那么只有当你的代码被提交到refs/for/master分支时,gerrit才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。
    当审核通过之后,gerrit会自动将这条分支合并到master主线上,然后邮件通知相关成员,master分支有更新,需要的成员再去pull就好了。而且这条refs/for/master分支,是透明的,也就是说普通成员其实是不需要知道这条线的,如果你正确配置了sourceTree,你也应该是看不到这条线的。

这两点很重要!!这两点很重要!!这两点很重要!!

Gerrit安装

3.1. 环境准备

  • ①. Linux,Gerrit需要Linux环境,ubuntu 或者  centos,这里使用Ubuntu;

  • ②. JDK,使用1.7版本就行

  • ③. MySQL,其实这个非必须,Gerrit自带的有H2数据库

  • ④. nginx/apache,作为认证和反向代理服务器;

  • ⑤. Maven, 在安装的过程中会下载一些jar文件;

  • ⑥. Git,用来拉取代码

3.2 java环境安装

下载:jdk-7u79-linux-x64.tar.gz JavaSE Upgrade

安装:sudo tar zxvf ./jdk-7u79-linux-x64.tar.gz -C /opt

配置:vim ~/.bashrc(针对当前用户) or vim /etc/profile(针对所有用户,推荐)

export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

验证:

java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

3.3 git环境

gerrit依赖,用来操作git repository

1

sudo apt-get install git

3.4 下载gerrit

1

wget  https://www.gerritcodereview.com/download/gerrit-2.12.4.war

3.5 apache2安装

1

sudo apt-get install apache2

验证:

1

service apache2 start

3.6 gerrit管理帐号

gerrit依赖,用来管理gerrit。

1

2

sudo adduser gerrit

sudo passwd gerrit

并将gerrit加入sudo权限

1

sudo visudo

gerrit  ALL=(ALL:ALL) ALL (为了测试方便,开最大权限)

3.7 配置gerrit

默认安装:

1

java -jar gerrit-2.12.4.war init --batch -d ~/review_site

更新配置文件:sudo vim ~/review_site/etc/gerrit.config

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[gerrit]

        basePath = git

        canonicalWebUrl = http://47.120.74.47:8081/

[database]

        type = h2

        database = /home/gerrit/review_site/db/ReviewDB

[index]

        type = LUCENE

[auth]

        type = http

[receive]

        enableSignedPush = false

[sendemail]

        smtpServer = smtp.163.com

        smtpServerPort = 465

        smtpEncryption = ssl

        smtpUser = avcd@163.com

        smtpPass = avcd123123123

        sslVerify = false

        from = code review<avcd@163.com>

[container]

        user = gerrit

        javaHome = /opt/jdk1.7.0_79/jre

[sshd]

        listenAddress = *:29418

[httpd]

        listenUrl = http://*:8081/

[cache]

        directory = cache

[http]

        proxy = http://47.120.74.47:8090

        proxyUsername = gerrit1 #proxy user & password

        proxyPassword = 123456

3.8 配置apache2反向代理

a、如果apache目录结构如下:

1

apache2.conf conf-enabled magic mods-enabled ports.conf sites-enabled conf-available envvars mods-available sites-available

开启SSL、Proxy、Rewrite等模块:

1

2

3

4

5

6

7

8

9

10

11

cd /etc/apache2/mods-enabled

ln -s ../mods-available/proxy.load

ln -s ../mods-available/proxy.conf

ln -s ../mods-available/proxy_http.load

ln -s ../mods-available/proxy_balancer.conf

ln -s ../mods-available/proxy_balancer.load

ln -s ../mods-available/rewrite.load

ln -s ../mods-available/ssl.conf

ln -s ../mods-available/ssl.load

ln -s ../mods-available/socache_shmcb.load #

ln -s ../mods-available/slotmem_shm.load #

更新配置文件:sudo vim /etc/apache2/sites-enabled/gerrit-httpd.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

ServerName 47.200.74.47

<VirtualHost *:8090>

    ProxyRequests Off

    ProxyVia Off

    ProxyPreserveHost On

    AllowEncodedSlashes On

    RewriteEngine On

    RewriteRule ^/(.*) http://47.200.74.47:8081/$1 [NE,P]

    <Proxy *>

          Order deny,allow

          Allow from all

    </Proxy>

    <Location /login/>

        AuthType Basic

        AuthName "Gerrit Code Review"

        Require valid-user

        AuthBasicProvider file

        AuthUserFile /etc/apache2/passwords

    </Location>

    ProxyPass / http://127.0.0.1:8081/

</VirtualHost> 

b、如果apache目录结构如下:

1

bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules

开启SSL、Proxy、Rewrite等模块:

1

2

3

4

5

6

7

# Open LoadModule

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule ssl_module modules/mod_ssl.so

LoadModule rewrite_module modules/mod_rewrite.so

# Gerrit config

Include conf/extra/gerrit-httpd.conf

其中apache2/conf/extra/gerrit-httpd.conf内容同上,apache2/sites-enabled/gerrit-httpd.conf。

3.9 配置gerrit账户密码

1

2

3

touch /etc/apache2/passwords

htpasswd -b /etc/apache2/passwords admin 123456(管理员)

htpasswd -b /etc/apache2/passwords gerrit1 123456(普通用户)

3.10 启动gerrit&启动apache2

1

2

sudo ~/review_site/bin/gerrit.sh start

sudo /etc/init.d/apache2 start

如何使用gerrit

​​​​​​​添加项目

前提:需要git使用端 / gerrit服务端配合使用。

4.1 添加项目(gerrit 服务端)

1

ssh -p 29418 gerrit1@47.200.74.47 gerrit create-project --empty-commit --name demo-project

#建议采用管理界面添加

 

4.2 使用gerrit添加已有项目:(适用于已有项目下移植到gerrit中)

ssh -p 29418 gerrit1@192.168.199.112 gerrit create-project --name exist-project #建议采用管理界面添加

或者使用gerrit管理界面

已有项目与gerrit上建立的exist-project关联

然后将已有项目与gerrit上建立的exist-project关联,即将已有代码库代码push到gerrit中进行管理。

1

2

3

cd ~/exist-project

git push ssh://gerrit1@47.200.74.47:29418/exist-project *:*

git客户端访问gerrit

4.3.生成sshkey(git使用端)

在开发账户中生成sshkey,用作与gerrit服务器连接。

1

ssh-keygen -t rsa #生成sshkey

4.4.添加sshkey到gerrit服务器(gerrit 服务端)

此步骤与git流程类似,即将id_rsa.pub内容上传到git repository,gerrit中帮我们管理git repository.

4.5 拉取代码&配置git hooks(git client端)

验证sshkey是否配置成功:ssh gerrit1@47.200.74.47 -p 29418

1

2

3

4

5

6

7

8

9

10

  ****    Welcome to Gerrit Code Review    ****

  Hi gerrit1, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.

  To clone a hosted Git repository, use:

  git clone ssh://gerrit1@47.200.74.47:29418/REPOSITORY_NAME.git

Connection to 47.200.74.47 closed.

拉取代码: 

1

git clone ssh://gerrit1@47.200.74.47:29418/REPOSITORY_NAME.git

更新githooks:

1

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 gerrit1@47.200.74.47:hooks/commit-msg ${gitdir}/hooks/

该过程用来在commit-msg中加入change-id,gerrit流程必备。

修改代码并提交,推送时与原有git流程不一致,采用 git push origin HEAD:refs/for/master 。

1

2

3

4

5

6

7

8

9

10

11

12

[root@iZ62j8121e5Z abcd]# git push origin HEAD:refs/for/master

Counting objects: 3, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 710 bytes | 710.00 KiB/sdone.

Total 3 (delta 0), reused 0 (delta 0)

remote: Processing changes: new: 1, refs: 1, done   

remote:

remote: New Changes:

remote:   http://47.200.74.47:8081/5 xxxx

remote:

To ssh://47.200.74.47:29418/abcd

 * [new branch]      HEAD -> refs/for/master

如果不加会提示一下错误:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[root@iZ62j8121e5Z abcd]# git push origin HEAD:refs/for/master

Counting objects: 3, done.

Writing objects: 100% (3/3), 239 bytes | 239.00 KiB/sdone.

Total 3 (delta 0), reused 0 (delta 0)

remote: Processing changes: refs: 1, done   

remote: ERROR: missing Change-Id in commit message footer

remote:

remote: Hint: To automatically insert Change-Id, install the hook:

remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 admin@47.200.74.47:hooks/commit-msg ${gitdir}/hooks/

remote: And then amend the commit:

remote:   git commit --amend

remote:

To ssh://47.200.74.47:29418/abcd

 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message footer)

error: failed to push some refs to 'ssh://admin@47.200.74.47:29418/abcd'

在网页完成code review

gerrit website完成code review

当完成push后,登录gerrit管理界面看到当前提交code review的change。

查看某次提交的详细信息(审核者+2可通过本次提交,提交者可通过Abandon本次提交):

如果审核者+2通过后,可提交该次commit.

 

gerrit 网页查看自己的提交记录

在搜索框 输入ower:self  点击搜索,可以查找自己的提交记录,点next可以翻页 

注意事项

  • 需要为每个使用者分配gerrit账号,不要都使用admin账号,因为admin账号可直接push master

  • pull代码后需要配置githooks文件,以便在commit时自动生成change-id,否则无法push

  • push代码时需要使用git push origin HEAD:refs/for/master(branch),gerrit默认关闭非admin账号的push direct权限

  • push代码时需要commit email与gerrit account email一致,否则无法push成功,可选择关闭email notify,并开启forge user权限,或者通过修改gerrit数据库account email信息

  • gerrit数据库与gitlab同步,需要安装replication插件,并开启该功能 

参考链接:

Java SDK Download: JavaSE Upgrade http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Gerrit Code Review - Releases Download: Gerrit Code Review;https://gerrit-releases.storage.googleapis.com/index.html

Gerrit Code Review -  Quick get started guide: https://git.eclipse.org/r/Documentation/install-quick.html

Gerrit代码审核流程 http://www.worldhello.net/gotgit/images/gerrit-workflow.png

Gerrit代码审核原理 5.6. Gerrit代码审核服务器:http://www.worldhello.net/gotgit/05-git-server/055-gerrit.html

Gerrit代码审核权限管理 https://gerrit-review.googlesource.com/Documentation/access-control.html#category_forge_committer

Gerrit修改数据库email信息 [原创]CI持续集成系统环境---部署gerrit环境完整记录:http://www.cnblogs.com/kevingrace/p/5624122.html

Gerrit安装replication插件 https://gerrit-review.googlesource.com/Documentation/cmd-plugin-install.html

gerrit的使用和配置

2. 配置Gerrit


2.1 获取账号和密码


一般每个公司都有一个Gerrit管理员,刚入职的时候需要叫Gerrit管理员同事在公司的服务器上帮你新建立一个账号,建好后他会告诉你Gerrit账号和密码。例如,我刚入职的时候公司的管理员就在10.200.11.248服务器上帮我建我账号和密码。

账号:salmonzhang

密码:salmonzhang

通常情况下账号和密码一样。另外告诉了我公司的Gerrit地址:

http://ppgerrit.com/gerrit/#/



2.2 注册邮箱


获取到账号和密码后,登录http://ppgerrit.com/gerrit/#/

这里写图片描述

选择All –> Conntact Information 点击Register New Email,弹出如下对话框:

这里写图片描述

输入你在公司的邮箱,然后点击Register。

注册成功后你将会收到一封邮件。将链接复制到新的浏览器窗口打开(因为我们公司不能直接点击打开)激活。

2.3 填写FullName


回到Gerrit登录界面

这里写图片描述

填写Full Name,可以是中文,也可以是英文,最后点击Save Changes。

2.4 配置 SSH key


生成公钥

rm -rf ~/.ssh

ssh-keygen -t rsa -C "自己邮箱地址" 

然后一路按回车键即可。

这里写图片描述

打开公钥

cat ~/.ssh/id_rsa.pub

打开后,复制公钥。

这里写图片描述

配置公钥

复制好公钥后,在Gerrit账户的设置页面加入即可。

这里写图片描述

2.5 配置ssh下的config文件来管理ssh连接


在本地目录C:\Users\salmonzhang.ssh下看看有没有config文件,如果没有就新建一个,并命名为config。

这里写图片描述

打开文件,根据需要配置如下信息:

Host ppgerrit.com
User salmonzhang
Port 29418
IdentityFile C:/Users/salmonzhang/.ssh/id_rsa

同样通过终端在自己服务器Linux下的根目录.ssh下也进行配置config文件:

Host ppgerrit.com
User salmonzhang
Port 29418
IdentityFile /home/salmonzhang/.ssh/id_rsa

其中:

Host:指定要访问的gerrit地址

User:指定登录的用户名

Port:指定端口号

IdentifyFile:指定本地私钥地址



2.6 配置git中的username和email


git config --global user.name 用户名

git config --global user.email 邮箱

配置好后,可以通过如下命令查看当前用户的配置信息

git config --global --list
这里写图片描述


2.7 配置gerrit上代码commit的模板


通过如下命令在本地服务器的根目录下新建一个template.txt文件

touch template.txt

vim 命令打开template.txt文件,输入模板信息,保存并退出。

[Feature] <module-name><jira-id-none>
[Module]  <module-name>
[Details]
    Description    :
    Root Cause     :
    Solution       :
    isPublicProblem: no
    Side Effect    : none
    Test Suggestion: none

执行如下命令配置commit模板

git config –global commit.template ~/template.txt
————————————————

原文链接:https://blog.csdn.net/salmon_zhang/article/details/79153904

Gerrit(2)图形介绍

Gerrit(2)图形介绍;https://blog.csdn.net/wxt15708432837/article/details/89678862

posted on 2022-10-04 01:24  bdy  阅读(293)  评论(0编辑  收藏  举报

导航