1.Gerrit簡介
Gerrit 是一種開放源代碼的代碼審查軟件,使用網頁界面。利用網頁瀏覽器,同一個團隊的軟件程序員,
可以相互審閱彼此修改后的代碼,決定是否能夠提交,退回或是繼續修改。它使用版本控制系統,Git 作為
底層。
通過Git 推送的代碼由gerrit 接管。如果提交者不具有直接提交權限,任何代碼的修改必須經過Gerrit
的審查,審查通過后才可以合並的主分支。這種審查機制可由管理者自由擬定,Gluster 采用自動化審查加
人工審查的方式。其中Jenkins 負責對代碼的自動化審查,包括編譯錯誤和腳本測試等。只有通過Jenkins
的測試才能進入后續的人工審查。
2.安裝
2.1 下載地址 http://gerrit-releases.storage.googleapis.com/index.html
2.2 安裝命令
java -jar gerrit-2.8.war init -d review-site
3.配置
Database?server?type [H2/?]:mysql Authentication method [OPENID/?]: http ***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]:
4.啟動
Executing .../gerrit.sh?start
5.新建passwd文件
mkdir /etc/nginx/passwd htpasswd -c /home/yu/gerrit/passwd/test.passwd test
6.nginx配置
location /gerrit/ { proxy_pass http://127.0.0.1:8081;
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; auth_basic "Gerrit Code Review"; auth_basic_user_file /home/yu/gerrit/passwd/test.passwd; }
7.項目搭建
配置 publicKey 創建項目 項目版本控制(GIT) ①客戶機必須先push到遠程倉庫的refs/for/*分支上,等待審核 ②為了能讓每次commit能自己insert 這個change-id,需要從gerrit server上下載一個腳本 scp -P 29418 -p root@192.168.1.31:/hooks/commit-msg .git/hooks/ ③提交 git push origin HEAD:refs/for/master
8.項目管理
用戶登錄http://localhost/gerrit。Projects->List 會看到一個All-Projects 的項目,
該項目為默認項目,設置了基本的評審權限。該默認項的作用是給其它項目提供繼承權限,其它項目繼承
All-Projects 的默認設置,避免繁瑣的權限管理配置。
圖中將會創建一個名為hello 的項目。其中Rights Inherit From 指定了項目的繼承源,選擇
All-Projects。點擊Create Project 完成了對hello 項目的創建,該項目繼承All-Project 的權限
9.用戶組
Pepole->List Groups 查看用戶組,在Gerrit2.8版本中,默認擁有5個用戶組
解讀如下:
- Administrators Gerrit管理員,該用戶組默認擁有admin用戶,也就是第一個注冊用戶
- Anonymous User 任何用戶未,登錄或未登錄
- Non-Interactive Users Gerrit中執行批處理的用戶
- Project Owners 項目擁有者
- Registerd Users 注冊用戶
以上是默認情況,點擊用戶組可以給用戶組添加指定用戶,使指定用戶成為該用戶組的一員
10.權限分配
Projects->List->All-projects->Acess 查看默認項目的權限分配。
解讀如下:
- Global Capbilities 可以看到Stream Events默認對Non-Interactive Users用戶組開放,Stream Events是
Gerrit的事件流,一旦有代碼改動會被觸發。
- Reference refs/* 對於所有分支 所有用戶都擁有讀權限,也就是說任何用戶可以clone任何代碼
- Reference refs/for/refs* 對於for分支,注冊用戶擁有推送、合並、提交權限。
- Reference refs/head/* 對於head分支中
Push :管理員和項目擁有者具有推送權限,普通用戶是無法直接向head分支推送的
Submit:管理員和項目擁有者具有提交權限
Label Verified: 這一權限是后來加進去的,為管理員和Non-Interactive Users用戶指定代碼檢查權限。
其中為Non-Interactive Users用戶組增加了jenkins用戶,使jenkins具有了Verified權限。
其評分范圍是-1到1。
Lable Code-Review: 管理員和項目擁有者具以及注冊用戶都有代碼Review權限,其中管理者和項目擁 有者評分范圍是-2到2,注冊用戶評分范圍是-1到1。Geriit中代碼評分為2才能被 commit。這樣做的意義在於:注冊用戶可以參與代碼評審,對其他評審這提供參考 幫助,但是注冊用戶不能直接打2分。
可以看出普通用戶和注冊用戶不能直接向head分支推送代碼,只能向for分支推送。因為head分支是GIt倉庫分支,for分支是gerrit引入的審查分支。代碼在被推送到head分支之前必須經過審查。這里給管理員賦予了head分支的推送權限,管理員可以直接向head推送而無需審查。