Gerrit的用法及與gitlab的區別


來到一個新的團隊,開發的代碼被同事覆蓋了。找同事核實,同事卻說根本沒有看到我的代碼。經過一番溝通了解,原來他們的代碼沒有直接在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,還多費一遍事。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM