gerrit代码评审服务器搭建

一、准备工作

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

        安装sendmail:

[[email protected] ~]#yum install -y sendmail

        安装apache:

[[email protected] ~]#yum install -y httpd

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

[[email protected] ~]#adduser gerrit

二、安装Gerrit

        首先切换到gerrit用户:

[[email protected] ~]#su gerrit

[[email protected] root]$cd

[[email protected] ~]$

        安装Gerrit软件:

[plain] view plain copy
  1. [[email protected] ~]$java -jar gerrit-2.10.war init -d review2  
  2.   
  3. *** Gerrit Code Review 2.10  
  4. ***   
  5.   
  6. Create '/home/gerrit/review2'  [Y/n]?   
  7.   
  8. *** Git Repositories  
  9. ***   
  10.   
  11. Location of Git repositories   [git]:   
  12.   
  13. *** SQL Database  
  14. ***   
  15.   
  16. Database server type           [h2]:   
  17.   
  18. *** Index  
  19. ***   
  20.   
  21. Type                           [LUCENE/?]:   
  22.   
  23. *** User Authentication  
  24. ***   
  25.   
  26. Authentication method          [OPENID/?]: HTTP  
  27. Get username from custom HTTP header [y/N]?   
  28. SSO logout URL                 :   
  29.   
  30. *** Review Labels  
  31. ***   
  32.   
  33. Install Verified label         [y/N]?   
  34.   
  35. *** Email Delivery  
  36. ***   
  37.   
  38. SMTP server hostname           [localhost]:   
  39. SMTP server port               [(default)]:   
  40. SMTP encryption                [NONE/?]:   
  41. SMTP username                  :   
  42.   
  43. *** Container Process  
  44. ***   
  45.   
  46. Run as                         [gerrit]:   
  47. Java runtime                   [/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre]:   
  48. Copy gerrit-2.10.war to /home/gerrit/review2/bin/gerrit.war [Y/n]?   
  49. Copying gerrit-2.10.war to /home/gerrit/review2/bin/gerrit.war  
  50.   
  51. *** SSH Daemon  
  52. ***   
  53.   
  54. Listen on address              [*]:                         
  55. Listen on port                 [29418]:   
  56.   
  57. Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v149  
  58.   If available, Gerrit can take advantage of features  
  59.   in the library, but will also function without it.  
  60. Download and install it now [Y/n]?   
  61. Downloading http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar ... !! FAIL !!  
  62.   
  63.   
  64. error: www.bouncycastle.org  
  65. Please download:  
  66.   
  67.   http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar  
  68.   
  69. and save as:  
  70.   
  71.   /home/gerrit/review2/lib/bcpkix-jdk15on-149.jar  
  72.   
  73. Press enter to continue   
  74. Continue without this library  [Y/n]?   
  75. Generating SSH host key ... rsa(simple)... done  
  76.   
  77. *** HTTP Daemon  
  78. ***   
  79.   
  80. Behind reverse proxy           [y/N]? y  
  81. Proxy uses SSL (https://)      [y/N]?   
  82. Subdirectory on proxy server   [/]: /gerrit  
  83. Listen on address              [*]:   
  84. Listen on port                 [8081]:   
  85. Canonical URL                  [http://localhost/gerrit]: http://10.1.5.116/gerrit  
  86.   
  87. *** Plugins  
  88. ***   
  89.   
  90. Install plugin commit-message-length-validator version v2.10 [y/N]?  
  91. Install plugin download-commands version v2.10 [y/N]?   
  92. Install plugin replication version v2.10 [y/N]?   
  93. Install plugin reviewnotes version v2.10 [y/N]?   
  94. Install plugin singleusergroup version v2.10 [y/N]?   
  95.   
  96. Initialized /home/gerrit/review2  
  97. Executing /home/gerrit/review2/bin/gerrit.sh start  
  98. Starting Gerrit Code Review: OK  
  99. Waiting for server on 10.1.5.116:80 ... OK  
  100. Opening http://10.1.5.116/gerrit/#/admin/projects/ ...FAILED  
  101. Open Gerrit with a JavaScript capable browser:  
  102.   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开机启动:

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

[[email protected] root]$sudo chkconfig --level 345 gerrit.sh on

三、配置Apache反向代理

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

[plain] view plain copy
  1. <Directory />  
  2. Options FollowSymLinks  
  3. AllowOverride None  
  4. </Directory>  
  5.   
  6. SetEnv GIT_PROJECT_ROOT /git-repo/  
  7. SetEnv GIT_HTTP_EXPORT_ALL  
  8. ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/  
  9.   
  10. ServerName localhost  
  11.   
  12. ProxyRequests Off  
  13. ProxyVia Off  
  14. ProxyPreserveHost On  
  15.   
  16. <Proxy *>  
  17. Order deny,allow  
  18. Allow from all  
  19. </Proxy>  
  20.   
  21. <Location "/gerrit/login/">  
  22. AuthType Basic  
  23. AuthName "Gerrit Code Review"  
  24. AuthBasicProvider file  
  25. AuthUserFile /etc/gerrit.passwd  
  26. Require valid-user  
  27. </Location>  
  28. ProxyPass /gerrit http://localhost:8081/gerrit  
        重启httpd服务:

[[email protected] ~]#service httpd restart

        设置httpd开机启动:

[[email protected] ~]#chkconfig --level 345 httpd on

四、注册Gerrit用户

        登录Gerrit服务器,执行:

gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

        点击"Register New Email"注册Email:

gerrit代码评审服务器搭建

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

[plain] view plain copy
  1. Welcome to Gerrit Code Review at 10.1.5.116.  
  2.   
  3. To add a verified email address to your user account, please  
  4. click on the following link while signed in as user1:  
  5.   
  6. http://10.1.5.116/gerrit/#/VE/a9ShrHrDxyxviNhDPGF/9YYu9l1NkC716+LOJQ==$MTAwMDAwMTp1c2VyMUB0ZXN0LmNvbQ==  
  7.   
  8. If you have received this mail in error, you do not need to take any  
  9. action to cancel the account.  The address will not be activated, and  
  10. you will not receive any further emails.  
  11.   
  12. If clicking the link above does not work, copy and paste the URL in a  
  13. new browser window instead.  
  14.   
  15. This is a send-only email address.  Replies to this message will not  
  16. be read or answered.  
        如果Gerrit服务器没有连接网络,可以通过mailq命令查找邮件:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

        邮箱注册成功!

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

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

gerrit代码评审服务器搭建

        点击“Administrators”:

gerrit代码评审服务器搭建

输入用户名:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

点击“Settings”:

gerrit代码评审服务器搭建

点击“Contact Information”:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

点击“Save Changes”:

gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

将复制的公钥粘贴上去:

gerrit代码评审服务器搭建

点击“Add”:

gerrit代码评审服务器搭建

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

五、创建代码库

        点击“Projects->Create New Project”:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

点击“Create Project”:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

双击选中的库:

gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

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

点击“Edit”:

gerrit代码评审服务器搭建

点击“Add Reference”:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

选中"Submit":

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建


六、检出代码

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

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

点击“Settings-->HTTP Password”:

gerrit代码评审服务器搭建

点击“Generate Passsword”:

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

clone成功!

七、代码提交评审

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

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

gerrit代码评审服务器搭建

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

[plain] view plain copy
  1. git push origin HEAD:refs/for/master  

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

[plain] view plain copy
  1. git push origin HEAD:refs/for/new-branch  

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

八、评审代码

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

[plain] view plain copy
  1. cool has uploaded a new change for review.  
  2.   
  3.   http://10.1.5.116/gerrit/4  
  4.   
  5. Change subject: add  
  6. ......................................................................  
  7.   
  8. add  
  9.   
  10. Change-Id: I6cfb4a809b39685df0c62fad0396c0d3d8593057  
  11. ---  
  12. M zzz  
  13. 1 file changed, 1 insertion(+), 1 deletion(-)  
  14.   
  15.   
  16.   git pull ssh://10.1.5.116:29418/new-repo refs/changes/04/4/1  
  17. --   
  18. To view, visit http://10.1.5.116/gerrit/4  
  19. To unsubscribe, visit http://10.1.5.116/gerrit/settings  
  20.   
  21. Gerrit-MessageType: newchange  
  22. Gerrit-Change-Id: I6cfb4a809b39685df0c62fad0396c0d3d8593057  
  23. Gerrit-PatchSet: 1  
  24. Gerrit-Project: new-repo  
  25. Gerrit-Branch: master  
  26. Gerrit-Owner: cool <[email protected]>  
  27. Gerrit-Reviewer: jason <[email protected]>  
在浏览器中输入:“http://10.1.5.116/gerrit/4”:
gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

点击“Review”会进入:

gerrit代码评审服务器搭建

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

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

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

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

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

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

gerrit代码评审服务器搭建

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

gerrit代码评审服务器搭建

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

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

gerrit代码评审服务器搭建

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