Gerrit的用法及與gitlab的區別
- 2022 年 3 月 2 日
- 筆記
來到一個新的團隊,開發的程式碼被同事覆蓋了。找同事核實,同事卻說根本沒有看到我的程式碼。經過一番溝通了解,原來他們的程式碼沒有直接在gitlab上操作,而是先提交到gerrit,然後在提交到git。但是程式碼拉取的時候,不會直接從gitlab上拉取。所以,我提交到gitlab上的程式碼,同事們都沒有拉取到。
新團隊使用的程式碼審核工具是gerrit,因為之前一直使用的是gitlab,審題提交也都是使用的gitlab。但是新團隊的小夥伴說他們提交,拉取都到gerrit上,我問:那不用集團的gitlab么?同事說最終程式碼還是保存在gitlab上,gerrit的作用就是用來審核的,當時有一個疑問,就是一個程式碼審核工具嘛,為什麼不直接用gitlab呢,而要多一個工具審核呢?得到的答覆是gitlab不好用。因為不了解gerrit,也不好多說,但是心裡有個大大的問號。
我的疑惑是,gitlab的程式碼審核功能為何不好用?為何一定要嵌入一個新的工具gerrit呢?而這個工具的主體程式碼還是在gitlab上,只是起到了審核的作用。所以,我要弄清兩個問題,這篇文章要解決兩個問題
1.Gerrit的用法,優缺點
2.和Gitlab在許可權管理上的區別
一、Gerrit的用法
參考文檔://39.106.94.54:50000/002-常用基礎服務/05-gerrit服務部署/
1、Gerrit介紹
Gerrit是建立在git版本控制系統之上的,基於web的程式碼審核工具。Gerrit是免費的,開源的,有一個可視化介面可供用戶操作。主要解決的問題是程式碼審核。他在傳統的源碼工具管理協作流程中強制性引入程式碼審核機制,通過人工程式碼審核和自動化程式碼驗證的方式,不符合要求的程式碼屏蔽在程式碼庫之外,確保核心程式碼多人校驗、多人互備和自動化構建核驗。
2、Gerrit的使用
1)依賴組件
– 安裝git:版本管理工具
– 安裝gerrit:不用說了,我們的今天的主角
– 安裝nginx:啟動gerrit使用
– 安裝java:初始化gerrit使用
– 安裝mysql資料庫:用來保存gerrit中的用戶以及用戶提交的記錄
– 安裝gitlab:用來和gerrit做集成
– 集成jenkins:程式碼提交到gerrit時,自動提交到gitlab
2)Gerrit安裝部署
第一步:安裝git
yum -y install git
第三步:安裝和配置資料庫
這一步省略了資料庫安裝步驟,使用現有資料庫就可以。
創建gerritdb資料庫
create database gerritdb CHARACTER SET utf8 COLLATE utf8_general_ci;
給用戶授權,我這裡是root用戶, 所以,不用在授權了
grant all on gerritdb.* to 'gerrituser'@'localhost'identified by 'gerritpass';
第二步:安裝gerrit
下載地址://www.gerritcodereview.com/
將其拷貝到/root目錄下
在root下創建一個項目gerrit
並且解壓項目
java -jar gerrit-3.5.0.1.war init -d /root/gerrit/
以下為安裝大致內容
切換到root用戶下,然後執行安裝命令, 安裝過程中除資料庫選用mysql(並配置對應gerrit的資料庫和密碼)、開啟方向代理並配置埠外,其他均選默認即可
修改配置文件
[gerrit]
basePath = git
canonicalWebUrl = //10.211.55.200:8080/
serverId = d69a4326-ef00-45f2-bb84-8c91dd9af221
[database]
type = mysql
hostname = 10.14.181.145
database = gerritdb
username = root
password = 123456
[container]
javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
user = root
javaHome = /usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64
[index]
type = lucene
[auth]
type = HTTP
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = //*:8080/
[cache]
directory = cache
重啟服務
/root/gerrit/bin/gerrit.sh restart
這時在伺服器驗證是否啟動成功
curl -GET //localhost:8080
又返回,提示HTTP server did not provide the username,接下來配置nginx
第四步:安裝nginx
nginx下載地址://nginx.org/en/download.html
安裝nginx的依賴
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
解壓nginx文件
tar -zxvf nginx-1.18.0.tar.gz
進入解壓後目錄執行編譯
./configure --with-http_ssl_module
編譯參數有很多,這邊我只增加了SSL模組,小夥伴可以根據自身情況調整
–prefix=PATH:指定 nginx 的安裝目錄
–conf-path=PATH:指定 nginx.conf 配置文件路徑
–user=NAME:nginx 工作進程的用戶
–with-pcre:開啟 PCRE 正則表達式的支援
–with-http_ssl_module:啟動 SSL 的支援
–with-http_stub_status_module:用於監控 Nginx 的狀態
–with-http-realip_module:允許改變客戶端請求頭中客戶端 IP 地址
–with-file-aio:啟用 File AIO
–add-module=PATH:添加第三方外部模組
執行完上述命令後,在解壓目錄下,多出一個Makefile文件
執行make命令
make
執行make install 命令
make install
因編譯時未指定安裝目錄,執行make install 命令後看到回饋日誌資訊,實際安裝目錄為/usr/local/nginx
進入實際安裝目錄,看看,並在其sbin目錄下執行啟動nginx
cd /usr/local/nginx/
./nginx
配置nginx作為代理認證,設置nginx的80埠直接跳轉到gerrit的登錄
server {
listen 80;
server_name localhost;
location / {
#root html;
#index index.html index.htm;
auth_basic "Gerrit Code Review";
auth_basic_user_file /passwords;
proxy_pass //127.0.0.1:8080;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
auth_basic 是否開啟使用「HTTP基本認證」(HTTP Basic Authentication)協議的用戶名密碼驗證, 默認不開啟
語法: auth_basic string | off;
默認值: auth_basic off;
上下文: http,server,location,limit_exceptauth_basic 值為off表示不開啟HTTP基本認證。
auth_basic指定了字元串,那麼字元串會在彈窗中顯示
auth_basic_user_file 指定保存用戶名密碼的文件
語法: auth_basic_user_file file;
默認值: —
上下文: http,server,location,limit_except
接下來,創建保存用戶名密碼的文件
touch /passwords
htpasswd -m /passwords admin
密碼設置為 123456
可以查看文件內容
重啟nginx
訪問nginx伺服器,埠是80
//10.211.55.200/
登錄成功後,會直接跳轉到//10.211.55.200:8080,如下介面。
我這個是新版本的,創建項目在BROWER下的Repository–>CREATE NEW
上面創建了一個管理員帳號
接下來創建普通用戶帳號
touch /gerrit.password
htpasswd -m /gerrit.password test
密碼為 123456
普通用戶登錄看不到創建項目的按鈕。其他功能都是差不多的
二、對比Gerrit和gitlab
Gerrit其實就是多了一個審核功能,個人覺得沒有必要非要使用gerrit,尤其是小團隊。gitlab的審核功能足夠了。gitlab+gerrit 更是架空了gitlab,還多費一遍事。