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文件,填入下列內容:

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

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

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<Location "/gerrit/login/">
AuthType Basic
AuthName "Gerrit Code Review"
AuthBasicProvider file
AuthUserFile /etc/gerrit.passwd
Require valid-user
</Location>
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):

        輸入用戶名和密碼,點擊“確定”:

        點擊"Register New Email"註冊Email:

        填入郵箱地址後,點擊“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查找被延遲的消息:

        將鏈接“http://10.1.5.116/gerrit/#/VE/a9ShrHrDxyxviNhDPGF/9YYu9l1NkC716+LOJQ==$MTAwMDAwMTp1c2VyMUB0ZXN0LmNvbQ==”輸入瀏覽器:

        郵箱註冊成功!

        第一個註冊的用戶自動具有管理員權限,以後註冊的用戶默認沒有管理員權限,權限的修改可以由管理員完成。

        下面說明一下將非第一個註冊的用戶user1設置爲管理員的過程。首先需要用具有管理員權限的用戶登錄,點擊“People-->List Groups”:


        點擊“Administrators”:

輸入用戶名:

輸入首字母系統就會列出匹配的條目。選中後點擊“Add”:

user1就稱爲管理員用戶組中的一員了,具備了管理員權限。

user1的默認名稱爲“Anonymous Coward”,可以修改一下:


點擊“Settings”:


點擊“Contact Information”:


在“Full Name”中輸入新名稱:

點擊“Save Changes”:


看右上角,名稱已經變了!

下面需要填入客戶端公鑰。創建一個用戶ttt,切換到ttt用戶,執行ssh-keygen生成公鑰:

將id_rsa.pub中的內容全部複製,然後在網頁中點擊右上角的全名:

點擊“Settings-->SSH Public Keys”:

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

將複製的公鑰粘貼上去:

點擊“Add”:

公鑰添加完成!一個用戶可以添加多個公鑰。

五、創建代碼庫

        點擊“Projects->Create New Project”:

在"Project Name"中填入代碼庫名稱,並選中“Create initial empty commit”:

點擊“Create Project”:

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

可見新的代碼庫已經創建成功。

創建這個代碼庫的用戶會默認關注這個庫的變化。關注的意思是有代碼提交等行爲時關注這個庫的用戶會收到郵件通知。其它用戶可以設置關注此庫:

點擊“Browse”可以查看已有的代碼庫:

雙擊選中的庫:

這樣new-repo這個庫就被當前用戶關注了。

我們可以爲這個新建立的庫配置權限,點擊“Projects-->LIst-->new-repo-->Access”:


默認new-repo是繼承All-Projects的權限。點擊All-Projects可以編輯全局權限,通常全局權限編輯完成後新項目不需要再設置權限(除非有特殊需求)。爲說明權限設置方法,先單獨爲new-repo設置本地權限,本地權限的優先級高於全局權限。通常設置評審代碼權限和提交權限即可,其中前者是使項目提交的代碼能夠被評審,後者是允許評審者在評審通過後合入所提交的代碼。

點擊“Edit”:

點擊“Add Reference”:

Reference是代碼提交的目的地(分支或Tag),Gerrit的權限管理是基於reference進行。默認reference是“refs/heads/*”,這個通常不需要修改。"refs/*"是控制所有提交的reference。點擊“Add Permission”:

添加代碼評審權限需要選中“Label Code-Review”:

添加組名,使得組內的成員擁有該權限:

點擊“Add”,再點擊“Add Reference”添加提交權限:

選中"Submit":

點擊“Save Changes”使設置生效:


六、檢出代碼

在git bash環境下執行“git config --global credential.helper store”。這樣就可以保存密碼信息,不用每次都輸入密碼。

點擊"Projects-->List-->new-reo-->Gernal":

點擊右下角那個小方框(或雙擊git clone那行字符串然後複製),在git bash終端中粘貼:

用戶名填入user1,密碼的獲取則要麻煩一些。點擊右上角的全名:

點擊“Settings-->HTTP Password”:

點擊“Generate Passsword”:

雙擊“Password”對應的條目,複製密碼,填入"Passwor for"對應的項中:

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:

如圖所示,在[remote "origin"]一行下面添加“push = HEAD:refs/for/master”,這樣就可以用“git push”提交代碼評審了:

八、評審代碼

        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 <[email protected]>
Gerrit-Reviewer: jason <[email protected]>
在瀏覽器中輸入:“http://10.1.5.116/gerrit/4”:

可以點擊畫紅框的“Side-by-SIde”位置查看diff,點擊Review填寫評審意見。填寫評審意見後如果沒有問題可點擊“Submit Patch Set1”合入代碼,如果發現問題則點擊“Abandon Change”丟棄修改。

點擊“Side-by-SIde”後會彈出頁面:

點擊“Review”會進入:

如果沒有發現問題,可以合入代碼,則在“Code-Review”選項中選擇“+2 Looks ...”;如果代碼需要合入則必須有人評審而且選擇此選項。

如果沒有發現問題但需要他人同意才能合入代碼,則選擇“+1 Looks ...”;

如果沒有任何建設性意見則選擇“0 No score”;

如果沒有發現問題但不建議合入則選擇“-1 I would ...”;

如果發現問題不允許合入則選擇“-2 This shall ...”;但如果其他評審人員認爲可以合入,且選擇了“+2 Looks ...”,在點擊“Submit Patch Set1”時代碼仍然可以合入。

評審意見可以在Cover Message下面的框中填入(也可以不填),然後點擊“Publish Comments”:

點擊“Submit Patch Set1”合入代碼:

可以看到Gerrit顯示代碼已經成功合入。

在提交代碼的客戶端上,需要執行"git pull"同步代碼:

代碼同步完成。一次代碼評審過程結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章