CentOS下Gerrit代码评审服务器的搭建与使用

一、准备工作

        安装CentOS7操作系统,准备Gerrit软件安装包:gerrit-2.10.war。

        安装sendmail:

[root@localhost ~]#yum install -y sendmail

        安装apache:

[root@localhost ~]#yum install -y httpd

        创建一个用户用于安装Gerrit:

[root@localhost ~]#adduser gerrit

二、安装Gerrit

        首先切换到gerrit用户:

[root@localhost ~]#su gerrit

[gerrit@localhost root]$cd

[gerrit@localhost ~]$

        安装Gerrit软件:

[gerrit@localhost ~]$java -jar gerrit-2.10.war init -d review2

*** Gerrit Code Review 2.10
*** 

Create '/home/gerrit/review2'  [Y/n]? 

*** Git Repositories
*** 

Location of Git repositories   [git]: 

*** SQL Database
*** 

Database server type           [h2]: 

*** Index
*** 

Type                           [LUCENE/?]: 

*** User Authentication
*** 

Authentication method          [OPENID/?]: HTTP
Get username from custom HTTP header [y/N]? 
SSO logout URL                 : 

*** Review Labels
*** 

Install Verified label         [y/N]? 

*** Email Delivery
*** 

SMTP server hostname           [localhost]: 
SMTP server port               [(default)]: 
SMTP encryption                [NONE/?]: 
SMTP username                  : 

*** Container Process
*** 

Run as                         [gerrit]: 
Java runtime                   [/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre]: 
Copy gerrit-2.10.war to /home/gerrit/review2/bin/gerrit.war [Y/n]? 
Copying gerrit-2.10.war to /home/gerrit/review2/bin/gerrit.war

*** SSH Daemon
*** 

Listen on address              [*]:                       
Listen on port                 [29418]: 

Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v149
  If available, Gerrit can take advantage of features
  in the library, but will also function without it.
Download and install it now [Y/n]? 
Downloading http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar ... !! FAIL !!


error: www.bouncycastle.org
Please download:

  http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar

and save as:

  /home/gerrit/review2/lib/bcpkix-jdk15on-149.jar

Press enter to continue 
Continue without this library  [Y/n]? 
Generating SSH host key ... rsa(simple)... done

*** HTTP Daemon
*** 

Behind reverse proxy           [y/N]? y
Proxy uses SSL (https://)      [y/N]? 
Subdirectory on proxy server   [/]: /gerrit
Listen on address              [*]: 
Listen on port                 [8081]: 
Canonical URL                  [http://localhost/gerrit]: http://10.1.5.116/gerrit

*** Plugins
*** 

Install plugin commit-message-length-validator version v2.10 [y/N]?
Install plugin download-commands version v2.10 [y/N]? 
Install plugin replication version v2.10 [y/N]? 
Install plugin reviewnotes version v2.10 [y/N]? 
Install plugin singleusergroup version v2.10 [y/N]? 

Initialized /home/gerrit/review2
Executing /home/gerrit/review2/bin/gerrit.sh start
Starting Gerrit Code Review: OK
Waiting for server on 10.1.5.116:80 ... OK
Opening http://10.1.5.116/gerrit/#/admin/projects/ ...FAILED
Open Gerrit with a JavaScript capable browser:
  http://10.1.5.116/gerrit/#/admin/projects/
        如果下载bcpkix-jdk15on-149.jar失败,可以手动下载http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar,再将bcpkix-jdk15on-149.jar放到/home/gerrit/review2/lib/bcpkix-jdk15on-149.jar。
        设置gerrit开机启动:

[gerrit@localhost root]$sudo ln -s /home/gerrit/review2/bin/gerrit.sh /etc/init.d/gerrit.sh

[gerrit@localhost root]$sudo chkconfig --level 345 gerrit.sh on

三、配置Apache反向代理

        在/etc/httpd/init.d中创建gerrit.conf文件,填入下列内容:


Options FollowSymLinks
AllowOverride None


SetEnv GIT_PROJECT_ROOT /git-repo/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

ServerName localhost

ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On


Order deny,allow
Allow from all



AuthType Basic
AuthName "Gerrit Code Review"
AuthBasicProvider file
AuthUserFile /etc/gerrit.passwd
Require valid-user

ProxyPass /gerrit http://localhost:8081/gerrit
        重启httpd服务:

[root@localhost ~]#service httpd restart

        设置httpd开机启动:

[root@localhost ~]#chkconfig --level 345 httpd on

四、注册Gerrit用户

        登录Gerrit服务器,执行:

        这样就注册了一个用户user1。

        在浏览器中输入:http://10.1.5.116/gerrit,回车(10.1.5.116是gerrit服务器的IP):

CentOS下Gerrit代码评审服务器的搭建与使用_第1张图片

        输入用户名和密码,点击“确定”:

CentOS下Gerrit代码评审服务器的搭建与使用_第2张图片

        点击"Register New Email"注册Email:

CentOS下Gerrit代码评审服务器的搭建与使用_第3张图片

        填入邮箱地址后,点击“Register”。如果网络没有问题则注册邮箱会收到下面的邮件:

Welcome to Gerrit Code Review at 10.1.5.116.

To add a verified email address to your user account, please
click on the following link while signed in as user1:

http://10.1.5.116/gerrit/#/VE/a9ShrHrDxyxviNhDPGF/9YYu9l1NkC716+LOJQ==$MTAwMDAwMTp1c2VyMUB0ZXN0LmNvbQ==

If you have received this mail in error, you do not need to take any
action to cancel the account.  The address will not be activated, and
you will not receive any further emails.

If clicking the link above does not work, copy and paste the URL in a
new browser window instead.

This is a send-only email address.  Replies to this message will not
be read or answered.
        如果Gerrit服务器没有连接网络,可以通过mailq命令查找邮件:


        可以看出这封注册邮件被延迟了。根据Q-ID查找被延迟的消息:

CentOS下Gerrit代码评审服务器的搭建与使用_第4张图片

        将链接“http://10.1.5.116/gerrit/#/VE/a9ShrHrDxyxviNhDPGF/9YYu9l1NkC716+LOJQ==$MTAwMDAwMTp1c2VyMUB0ZXN0LmNvbQ==”输入浏览器:

CentOS下Gerrit代码评审服务器的搭建与使用_第5张图片

        邮箱注册成功!

        第一个注册的用户自动具有管理员权限,以后注册的用户默认没有管理员权限,权限的修改可以由管理员完成。

        下面说明一下将非第一个注册的用户user1设置为管理员的过程。首先需要用具有管理员权限的用户登录,点击“People-->List Groups”:

CentOS下Gerrit代码评审服务器的搭建与使用_第6张图片

        点击“Administrators”:

CentOS下Gerrit代码评审服务器的搭建与使用_第7张图片

输入用户名:

输入首字母系统就会列出匹配的条目。选中后点击“Add”:

user1就称为管理员用户组中的一员了,具备了管理员权限。

user1的默认名称为“Anonymous Coward”,可以修改一下:


点击“Settings”:

CentOS下Gerrit代码评审服务器的搭建与使用_第8张图片

点击“Contact Information”:

CentOS下Gerrit代码评审服务器的搭建与使用_第9张图片

在“Full Name”中输入新名称:

CentOS下Gerrit代码评审服务器的搭建与使用_第10张图片

点击“Save Changes”:

CentOS下Gerrit代码评审服务器的搭建与使用_第11张图片

看右上角,名称已经变了!

下面需要填入客户端公钥。创建一个用户ttt,切换到ttt用户,执行ssh-keygen生成公钥:

CentOS下Gerrit代码评审服务器的搭建与使用_第12张图片

将id_rsa.pub中的内容全部复制,然后在网页中点击右上角的全名:

CentOS下Gerrit代码评审服务器的搭建与使用_第13张图片

点击“Settings-->SSH Public Keys”:

CentOS下Gerrit代码评审服务器的搭建与使用_第14张图片

点击“How to Generate an SSH Key”可以查看如何生成Public Key:

CentOS下Gerrit代码评审服务器的搭建与使用_第15张图片

将复制的公钥粘贴上去:

CentOS下Gerrit代码评审服务器的搭建与使用_第16张图片

点击“Add”:

CentOS下Gerrit代码评审服务器的搭建与使用_第17张图片

公钥添加完成!一个用户可以添加多个公钥。

五、创建代码库

        点击“Projects->Create New Project”:

CentOS下Gerrit代码评审服务器的搭建与使用_第18张图片

在"Project Name"中填入代码库名称,并选中“Create initial empty commit”:

CentOS下Gerrit代码评审服务器的搭建与使用_第19张图片

点击“Create Project”:

CentOS下Gerrit代码评审服务器的搭建与使用_第20张图片

在“Description”中填入描述信息,点击"Save Changes"。点击"Projects-->List":

CentOS下Gerrit代码评审服务器的搭建与使用_第21张图片

可见新的代码库已经创建成功。

创建这个代码库的用户会默认关注这个库的变化。关注的意思是有代码提交等行为时关注这个库的用户会收到邮件通知。其它用户可以设置关注此库:

CentOS下Gerrit代码评审服务器的搭建与使用_第22张图片

点击“Browse”可以查看已有的代码库:

CentOS下Gerrit代码评审服务器的搭建与使用_第23张图片

双击选中的库:

CentOS下Gerrit代码评审服务器的搭建与使用_第24张图片

这样new-repo这个库就被当前用户关注了。

我们可以为这个新建立的库配置权限,点击“Projects-->LIst-->new-repo-->Access”:

CentOS下Gerrit代码评审服务器的搭建与使用_第25张图片

默认new-repo是继承All-Projects的权限。点击All-Projects可以编辑全局权限,通常全局权限编辑完成后新项目不需要再设置权限(除非有特殊需求)。为说明权限设置方法,先单独为new-repo设置本地权限,本地权限的优先级高于全局权限。通常设置评审代码权限和提交权限即可,其中前者是使项目提交的代码能够被评审,后者是允许评审者在评审通过后合入所提交的代码。

点击“Edit”:

CentOS下Gerrit代码评审服务器的搭建与使用_第26张图片

点击“Add Reference”:

CentOS下Gerrit代码评审服务器的搭建与使用_第27张图片

Reference是代码提交的目的地(分支或Tag),Gerrit的权限管理是基于reference进行。默认reference是“refs/heads/*”,这个通常不需要修改。"refs/*"是控制所有提交的reference。点击“Add Permission”:

CentOS下Gerrit代码评审服务器的搭建与使用_第28张图片

添加代码评审权限需要选中“Label Code-Review”:

CentOS下Gerrit代码评审服务器的搭建与使用_第29张图片

添加组名,使得组内的成员拥有该权限:

CentOS下Gerrit代码评审服务器的搭建与使用_第30张图片

点击“Add”,再点击“Add Reference”添加提交权限:

CentOS下Gerrit代码评审服务器的搭建与使用_第31张图片

选中"Submit":

CentOS下Gerrit代码评审服务器的搭建与使用_第32张图片

点击“Save Changes”使设置生效:

CentOS下Gerrit代码评审服务器的搭建与使用_第33张图片


六、检出代码

在git bash环境下执行“git config --global credential.helper store”。这样就可以保存密码信息,不用每次都输入密码。

点击"Projects-->List-->new-reo-->Gernal":

CentOS下Gerrit代码评审服务器的搭建与使用_第34张图片

点击右下角那个小方框(或双击git clone那行字符串然后复制),在git bash终端中粘贴:

用户名填入user1,密码的获取则要麻烦一些。点击右上角的全名:

CentOS下Gerrit代码评审服务器的搭建与使用_第35张图片

点击“Settings-->HTTP Password”:

CentOS下Gerrit代码评审服务器的搭建与使用_第36张图片

点击“Generate Passsword”:

CentOS下Gerrit代码评审服务器的搭建与使用_第37张图片

双击“Password”对应的条目,复制密码,填入"Passwor for"对应的项中:

CentOS下Gerrit代码评审服务器的搭建与使用_第38张图片

clone成功!

七、代码提交评审

在提交代码之前,需要进入到代码库主目录下执行:

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/
这样提交的时候日志中就会自动携带Change-ID,提交才能成功:

然后可以用git命令提交代码。提交完毕后需要push到Gerrit评审服务器,push命令为:

git push origin HEAD:refs/for/master

如果提交到名称为new-branch的分支则提交命令为:

git push origin HEAD:refs/for/new-branch

为简化命令,编辑new-repo/.git/config:

CentOS下Gerrit代码评审服务器的搭建与使用_第39张图片

如图所示,在[remote "origin"]一行下面添加“push = HEAD:refs/for/master”,这样就可以用“git push”提交代码评审了:

CentOS下Gerrit代码评审服务器的搭建与使用_第40张图片

八、评审代码

        new-repo库中有代码提交后,关注这个代码库的用户会收到一个邮件通知:

cool has uploaded a new change for review.

  http://10.1.5.116/gerrit/4

Change subject: add
......................................................................

add

Change-Id: I6cfb4a809b39685df0c62fad0396c0d3d8593057
---
M zzz
1 file changed, 1 insertion(+), 1 deletion(-)


  git pull ssh://10.1.5.116:29418/new-repo refs/changes/04/4/1
-- 
To view, visit http://10.1.5.116/gerrit/4
To unsubscribe, visit http://10.1.5.116/gerrit/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6cfb4a809b39685df0c62fad0396c0d3d8593057
Gerrit-PatchSet: 1
Gerrit-Project: new-repo
Gerrit-Branch: master
Gerrit-Owner: cool 
Gerrit-Reviewer: jason 
在浏览器中输入:“http://10.1.5.116/gerrit/4”:
CentOS下Gerrit代码评审服务器的搭建与使用_第41张图片

可以点击画红框的“Side-by-SIde”位置查看diff,点击Review填写评审意见。填写评审意见后如果没有问题可点击“Submit Patch Set1”合入代码,如果发现问题则点击“Abandon Change”丢弃修改。

点击“Side-by-SIde”后会弹出页面:

CentOS下Gerrit代码评审服务器的搭建与使用_第42张图片

点击“Review”会进入:

CentOS下Gerrit代码评审服务器的搭建与使用_第43张图片

如果没有发现问题,可以合入代码,则在“Code-Review”选项中选择“+2 Looks ...”;如果代码需要合入则必须有人评审而且选择此选项。

如果没有发现问题但需要他人同意才能合入代码,则选择“+1 Looks ...”;

如果没有任何建设性意见则选择“0 No score”;

如果没有发现问题但不建议合入则选择“-1 I would ...”;

如果发现问题不允许合入则选择“-2 This shall ...”;但如果其他评审人员认为可以合入,且选择了“+2 Looks ...”,在点击“Submit Patch Set1”时代码仍然可以合入。

评审意见可以在Cover Message下面的框中填入(也可以不填),然后点击“Publish Comments”:

CentOS下Gerrit代码评审服务器的搭建与使用_第44张图片

点击“Submit Patch Set1”合入代码:

CentOS下Gerrit代码评审服务器的搭建与使用_第45张图片

可以看到Gerrit显示代码已经成功合入。

在提交代码的客户端上,需要执行"git pull"同步代码:

代码同步完成。一次代码评审过程结束。

你可能感兴趣的:(CentOS下Gerrit代码评审服务器的搭建与使用)