Gerrit的用法及與gitlab的區別

newknight發表於2022-03-02

來到一個新的團隊,開發的程式碼被同事覆蓋了。找同事核實,同事卻說根本沒有看到我的程式碼。經過一番溝通了解,原來他們的程式碼沒有直接在gitlab上操作,而是先提交到gerrit,然後在提交到git。但是程式碼拉取的時候,不會直接從gitlab上拉取。所以,我提交到gitlab上的程式碼,同事們都沒有拉取到。

新團隊使用的程式碼稽核工具是gerrit,因為之前一直使用的是gitlab,審題提交也都是使用的gitlab。但是新團隊的小夥伴說他們提交,拉取都到gerrit上,我問:那不用集團的gitlab麼?同事說最終程式碼還是儲存在gitlab上,gerrit的作用就是用來稽核的,當時有一個疑問,就是一個程式碼稽核工具嘛,為什麼不直接用gitlab呢,而要多一個工具稽核呢?得到的答覆是gitlab不好用。因為不瞭解gerrit,也不好多說,但是心裡有個大大的問號。

我的疑惑是,gitlab的程式碼稽核功能為何不好用?為何一定要嵌入一個新的工具gerrit呢?而這個工具的主體程式碼還是在gitlab上,只是起到了稽核的作用。所以,我要弄清兩個問題,這篇文章要解決兩個問題

1.Gerrit的用法,優缺點

2.和Gitlab在許可權管理上的區別

一、Gerrit的用法

參考文件:http://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

下載地址:https://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 = http://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 = http://*:8080/
[cache]
	directory = cache

重啟服務

/root/gerrit/bin/gerrit.sh restart

這時在伺服器驗證是否啟動成功

curl -GET http://localhost:8080

又返回,提示HTTP server did not provide the username,接下來配置nginx

第四步:安裝nginx

nginx下載地址:http://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檔案

image

執行make命令

make

執行make install 命令

make install

因編譯時未指定安裝目錄,執行make install 命令後看到反饋日誌資訊,實際安裝目錄為/usr/local/nginx
進入實際安裝目錄,看看,並在其sbin目錄下執行啟動nginx

cd /usr/local/nginx/
./nginx
image

配置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              http://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_except

auth_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

可以檢視檔案內容

image

重啟nginx

訪問nginx伺服器,埠是80

http://10.211.55.200/
image

登入成功後,會直接跳轉到http://10.211.55.200:8080,如下介面。

image

我這個是新版本的,建立專案在BROWER下的Repository-->CREATE NEW

image

上面建立了一個管理員賬號

接下來建立普通使用者賬號

touch /gerrit.password

htpasswd -m /gerrit.password test

密碼為 123456

普通使用者登入看不到建立專案的按鈕。其他功能都是差不多的

二、對比Gerrit和gitlab

Gerrit其實就是多了一個稽核功能,個人覺得沒有必要非要使用gerrit,尤其是小團隊。gitlab的稽核功能足夠了。gitlab+gerrit 更是架空了gitlab,還多費一遍事。

相關文章