• 正文
    • Gerrit簡介
    • Gerrit 安裝
    • 結(jié)語
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

gerrit部署使用

2023/03/13
67
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

gerrit是基于git的工具,code review功能是開發(fā)中很方便,此外它可以配合Jenkins進行自動化的編譯工作。今天給大家分享一下gerrit在ubuntu的安裝使用

歡迎關(guān)注微信公眾號:羽林君,或者添加作者個人微信:become_me

Gerrit簡介

Gerrit 是建立在Git版本控制系統(tǒng)之上并且基于Web的一個免費開源的輕量級代碼審查工具。作為開發(fā)者和Git之間的一層屏障,不允許直接將本地修改內(nèi)容同步到遠程倉庫中。與Jenkins集成后,可以在每次提交代碼后,人工審核代碼前,通過Jenkins任務(wù)自動運行單元測試、構(gòu)建以及自動化測試,如果Jenkins任務(wù)失敗,會自動打回本次提交。

一般Git、Gerrit和Jenkins集成后的使用流程

    1.開發(fā)者提交代碼到Gerrit2.觸發(fā)對應(yīng)的Jenkins任務(wù),通過以后Verified加13.人工審核,審核通過后code review加2,觸發(fā)對應(yīng)的Jenkins任務(wù)4.通過以后確認本次提交,Gerrit執(zhí)行與Git倉庫的代碼同步操作5.代碼進入Git倉庫

Gerrit 安裝

安裝需要內(nèi)容,gerrit文件,環(huán)境有g(shù)it、jdk環(huán)境、反向代理工具nginx(幫助登錄網(wǎng)頁)

本文在nginx安裝部分是最后解決問題時候,才發(fā)現(xiàn)反向代理工具的是必須的,最后才安裝。

先下載 gerrit文件

下載鏈接:https://www.gerritcodereview.com/#download,官網(wǎng)可達也可以使用wget工具命令行下載:wget https://gerrit-releases.storage.googleapis.com/gerrit-3.1.3.war

官網(wǎng)安裝指導(dǎo)文檔:

https://gerrit-review.googlesource.com/Documentation/index.html

https://gerrit-documentation.storage.googleapis.com/Documentation/3.6.2/install.html

下載下來等待其他環(huán)境安裝好之后進行使用。

jdk環(huán)境

直接apt install進行安裝sudo apt install openjdk-11-jdk安裝之后使用java -version命令查看是否安裝成功

git環(huán)境

gerrit需要git環(huán)境,直接安裝gitsudo apt-get install git

gerrit啟動

進入到gerrit*.war文件所在目錄,執(zhí)行以下命令進行交互式安裝 java -jar ~/Downloads/gerrit*.war init -d ~/Gerrit/

很多人是把gerrit放入/home/gerrit/目錄,但是無法創(chuàng)建,需要創(chuàng)建一個gerrit賬號進行訪問。

sudo?adduser?gerrit
sudo?su?gerrit

類似于如此操作就可以創(chuàng)建一個gerrit目錄

最后我選擇了本地目錄建立 Gerrit ,操作執(zhí)行 java -jar gerrit*.war init -d ~/Gerrit/

注意:1、gerrit可以將數(shù)據(jù)保存到mysql或其他的數(shù)據(jù)中,如果你需要使用mysql,則需要安裝gerrit之前安裝mysql,我這里直接使用默認的數(shù)據(jù)庫類型 H2。如果你需要使用其他類型數(shù)據(jù)庫,可以參考下面這個鏈接:

    https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/install.html

2、如果gerrit需要結(jié)合jenkins做CI持續(xù)構(gòu)建的話,在交互式安裝過程中需要安裝Verified label,默認是不安裝的:Install Verified label ? ? ? ? [y/N]? y ? 這里選擇y,安裝Verified label。

啟動執(zhí)行具體細節(jié)如下:(比較復(fù)雜,后期使用需要反復(fù)觀看里面配置以及解釋)

lyn@lyn:~/Downloads$?java?-jar?gerrit*.war?init?-d?~/Gerrit/
Using?secure?store:?com.google.gerrit.server.securestore.DefaultSecureStore
[2023-03-11?21:25:46,286]?[main]?INFO??com.google.gerrit.server.config.GerritServerConfigProvider?:?No?/home/lyn/Gerrit/etc/gerrit.config;?assuming?defaults

***?Gerrit?Code?Review?3.7.0
***

Create?'/home/lyn/Gerrit'??????[Y/n]??y

***?Git?Repositories
***

Location?of?Git?repositories???[git]:??git???????#指定Git存儲庫,最好指定一個不存在的目錄,他會自動創(chuàng)建

***?JGit?Configuration
***

Auto-configured?"receive.autogc?=?false"?to?disable?auto-gc?after?git-receive-pack.

***?Index
***

Type???????????????????????????[lucene]:???????#默認即可。

***?User?Authentication
***

Authentication?method??????????[openid/?]:?HTTP???????#認證方法輸入HTTP,我們要使用反向代理
Get?username?from?custom?HTTP?header?[y/N]?
SSO?logout?URL?????????????????:
Enable?signed?push?support?????[y/N]?
Use?case?insensitive?usernames?[Y/n]?

***?Review?Labels
***

Install?Verified?label?????????[y/N]???y

***?Email?Delivery
***

SMTP?server?hostname???????????[localhost]:???????#輸入自動發(fā)送郵件的smtp服務(wù)器
SMTP?server?port???????????????[(default)]:???????#465/994時SSL協(xié)議端口后,25是非SSL協(xié)議端口號
SMTP?encryption????????????????[none/?]:???????#如果上一步輸入的是465/994,此處輸入SSL,否則直接回車即可
SMTP?username??????????????????:???????#此處是你定義自動發(fā)送郵件的郵箱地址
???????????????????????????????????????#接著我們需要輸入2次咱們郵箱的授權(quán)碼,而非郵箱密碼!

***?Container?Process
***

Run?as?????????????????????????[lyn]:?gerrit
Java?runtime???????????????????[/usr/lib/jvm/java-11-openjdk-amd64]:
Copy?gerrit-3.7.0.war?to?/home/lyn/Gerrit/bin/gerrit.war?[Y/n]?
Copying?gerrit-3.7.0.war?to?/home/lyn/Gerrit/bin/gerrit.war

***?SSH?Daemon
***

Listen?on?address??????????????[*]:???????#指定SSH后臺服務(wù)的監(jiān)聽地址
Listen?on?port?????????????????[29418]:???????#指定SSH后臺服務(wù)的端口號
Generating?SSH?host?key?...?rsa...?ed25519...?ecdsa?256...?ecdsa?384...?ecdsa?521...?done

***?HTTP?Daemon
***
Behind?reverse?proxy???????????[Y/n]??y????????#使用發(fā)向代理
Proxy?uses?SSL?(https://)??????[Y/n]????????#不適用SSL
Subdirectory?on?proxy?server???[/]:???????#指定代理服務(wù)器的子目錄,默認為"/"路徑,默認即可
Listen?on?address??????????????[*]:???????#只當(dāng)gerrit服務(wù)的監(jiān)聽地址
Listen?on?port?????????????????[8080]:?8088???????#指定gerrit的服務(wù)端口?
Canonical?URL??????????????????[http://lyn:8080/]:?http://lyn:8088???????#指定標(biāo)準(zhǔn)連接


***?Cache
***


***?Plugins
***

Installing?plugins.???????#接下來就是詢問我們是否安裝插件,我們一路”y“?即可~
Install?plugin?codemirror-editor?version?v3.7.0?[y/N]??y
Installed?codemirror-editor?v3.7.0
Install?plugin?commit-message-length-validator?version?v3.7.0?[y/N]??y
Installed?commit-message-length-validator?v3.7.0
Install?plugin?delete-project?version?v3.7.0?[y/N]??y
Installed?delete-project?v3.7.0
Install?plugin?download-commands?version?v3.7.0?[y/N]??y
Installed?download-commands?v3.7.0
Install?plugin?gitiles?version?v3.7.0?[y/N]??y
Installed?gitiles?v3.7.0
Install?plugin?hooks?version?v3.7.0?[y/N]??y
Installed?hooks?v3.7.0
Install?plugin?plugin-manager?version?v3.7.0?[y/N]??y
Installed?plugin-manager?v3.7.0
Install?plugin?replication?version?v3.7.0?[y/N]??y
Installed?replication?v3.7.0
Install?plugin?reviewnotes?version?v3.7.0?[y/N]??y
Installed?reviewnotes?v3.7.0
Install?plugin?singleusergroup?version?v3.7.0?[y/N]??y
Installed?singleusergroup?v3.7.0
Install?plugin?webhooks?version?v3.7.0?[y/N]??y
Installed?webhooks?v3.7.0
Initializing?plugins.

============================================================================
Welcome?to?the?Gerrit?community

Find?more?information?on?the?homepage:?https://www.gerritcodereview.com
Discuss?Gerrit?on?the?mailing?list:?https://groups.google.com/g/repo-discuss
============================================================================
Initialized?/home/lyn/Gerrit
Init?complete,?reindexing?accounts,changes,groups,projects?with:?reindex?--site-path?/home/lyn/Gerrit?--threads?1?--index?accounts?--index?changes?--index?groups?--index?projects?--disable-cache-statsReindexed?0?documents?in?accounts?index?in?0.0s?(0.0/s)
Index?accounts?in?version?12?is?ready
Reindexing?groups:??????100%?(2/2)
Reindexed?2?documents?in?groups?index?in?0.8s?(2.5/s)
Index?groups?in?version?9?is?ready
Reindexing?changes:?Slicing?projects:?100%?(2/2),?done
Reindexed?0?documents?in?changes?index?in?0.0s?(0.0/s)
Index?changes?in?version?79?is?ready
Reindexing?projects:????100%?(2/2)
Reindexed?2?documents?in?projects?index?in?0.1s?(14.6/s)
Index?projects?in?version?5?is?ready
Executing?/home/lyn/Gerrit/bin/gerrit.sh?start
Starting?Gerrit?Code?Review:?WARNING:?Could?not?adjust?Gerrit's?process?for?the?kernel's?out-of-memory?killer.
?????????This?may?be?caused?by?/home/lyn/Gerrit/bin/gerrit.sh?not?being?run?as?root.
?????????Consider?changing?the?OOM?score?adjustment?manually?for?Gerrit's?PID=193375?with?e.g.:
?????????echo?'-1000'?|?sudo?tee?/proc/193375/oom_score_adj
OK

創(chuàng)建gerrit.password文件,并創(chuàng)建用戶

htpasswd?-c?/home/lyn/Gerrit/etc/gerrit.password?admin??????#?創(chuàng)建第一個用戶admin,同時會生成一個gerrit.password文件
?
htpasswd?-m?/home/lyn/Gerrit/etc/gerrit.password?lyn?????#?在gerrit.password增加用戶用?-m

執(zhí)行上面的命令,會要求多次輸入密碼,改密碼就是對應(yīng)用戶的登錄密碼。htpasswd 是apache密碼生成工具,如果你的電腦沒有這個命令,可以直接安裝apache2sudo apt-get install apache2

運行g(shù)errit

在之前安裝gerrit的目錄下執(zhí)行腳本,啟動gerrit

#?啟動gerrit
$?~/Gerrit/bin/gerrit.sh?start
#?停止gerrit
$?~/Gerrit/bin/gerrit.sh?stop
#?重啟gerrit
$?~/Gerrit/bin/gerrit.sh?restart

成功之后使用8088端口進行訪問:

這個時候我沒有開啟反向代理,會提示如下問題:

Configuration?Error
Check?the?HTTP?server’s?authentication?settings.
The?HTTP?server?did?not?provide?the?username?in?the?Authorization?header?when?it?forwarded?the?request?to?Gerrit?Code?Review.

If?the?HTTP?server?is?Apache?HTTPd,?check?the?proxy?configuration?includes?an?authorization?directive?with?the?proper?location,?ensuring?it?ends?with?‘/’:

后面還遇到了反向代理設(shè)置后,502,403問題。但都可以歸結(jié)為一個原因。

錯誤原因:gerrit.conf 配置錯誤

gerrit相關(guān)配置文件修改,gerrit目錄的gerrit.config和nginx的gerrit.conf修改解決。

原因是Gerrit有兩種工作方式,我們要采用 http 的工作方式,也就是代碼審核人員,可以直接通過Web頁面對提交的代碼進行評審以及后續(xù)的操作。

然后Gerrit要求不能直接請求其端口,必須要使用反向代理才能正確登錄。而我們知道Nginx的成功正在于其高效、輕量級以及 反向代理 ,雖然Apache也有反向代理的功能,但是如果你在安裝Apache時沒有開啟,后續(xù)的開啟過程要相對復(fù)雜一點,而Nginx就簡單的多了。

https://blog.csdn.net/zhoulr000/article/details/114173876

方法一:安裝ngnixsudo apt-get install nginx

設(shè)置nginx的gerrit反向代理文件sudo vi /etc/nginx/conf.d/gerrit.conf

    配置nginx反向代理,文件內(nèi)容如下
server?{
????listen?81;
????server_name?localhost;
????allow?all;
????deny?all;

????auth_basic?"Welcome?to?Gerrit?Code?Review?Site!";
????auth_basic_user_file?/home/lyn/Gerrit/etc/gerrit.password;


????location?/?{
????????proxy_pass?http://127.0.0.1:8088;
????????proxy_set_header?X-Forwarded-For?$remote_addr;
????????proxy_set_header?Host?$host;
????}
}

需要注意的部分:

    • listen 81: nginx server 監(jiān)聽的端口,盡量不要使用知名端口80,我這里面換成了81端口/home/lyn/Gerrit/etc/gerrit.password: 這個是http認證使用的文件,后面需要配置

 

    對應(yīng)gerrit 端口配置為8088

其中還修改了gerrit中etc目錄的gerrit.config文件,內(nèi)容如下:

[gerrit]
????????basePath?=?git
????????canonicalWebUrl?=?http://lyn:8088/
????????serverId?=?f0858671-052c-4ea0-9883-032a598c9aae
[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?=?lyn
????????javaHome?=?/usr/lib/jvm/java-11-openjdk-amd64
[index]
????????type?=?lucene
[auth]
????????type?=?HTTP
[receive]
????????enableSignedPush?=?false
[sendemail]
????????smtpServer?=?localhost
[sshd]
????????listenAddress?=?*:29418
[httpd]
????????listenUrl?=?proxy-https://*:8088/
[cache]
????????directory?=?cache

配置完成后重啟gerrit~/Gerrit/bin/gerrit.sh restart

配置完成后重啟ngnix服務(wù)

sudo?/etc/init.d/nginx?restart???????#?重啟nginx
sudo?/etc/init.d/nginx?status????????#?查看狀態(tài)
或者執(zhí)行
systemctl?restart?nginx.service
systemctl?status?nginx.service

啟動之后可以使用工具查看一下自己配置的端口有沒有正常工作:sudo netstat -ltpnps $(fuser 8088/tcp)這個工具可以直接查看有沒有占據(jù)這個端口的進程

方法二:安裝apache2

我們也可以讓Apache2作為反向代理服務(wù)器訪問Gerrit, 這個沒有驗證,所以沒有過多描述,大家也可以參考此文:https://www.jianshu.com/p/0808559e6e2b 進行apache2配置

登錄gerrit

輸入下面鏈接,就可以登錄到gerrit頁面。

http://192.168.33.128:81/
    192.168.33.128:是主機地址81: 是nginx監(jiān)聽的地址,不是gerrit配置的8088(這就是反向代理的作用)。

輸入剛才htpasswd設(shè)置好的用戶名和密碼登錄:gerrit就可以看到了:

gerrit插件小知識

gerrit 使用過程中,當(dāng)進行 commit時,必須要生成一個 Change-Id,否則,push到gerrit服務(wù)器時,會收到一個錯誤提醒,而生成Change-Id可以用hooks工具。hooks鉤子工具中commit-msg hook可以幫我們生成Change-Id,就是運行g(shù)errit使用安裝的插件插件安裝情況可以在gerrit管理員的界面看到

但是當(dāng)我們想看插件里面的指導(dǎo)文檔時候會遇到打不開情況:這個時候需要我們修改一下訪問方式:如下修改http://192.168.33.128:81/plugins/hooks/Documentation/index.html

這樣修改就可以看到插件的指導(dǎo)網(wǎng)頁了此外還有將Gerrit服務(wù)器設(shè)置開機自啟動,Jenkins配置等等,后面我們再描述

結(jié)語

這就是我在gerrit部署基本操作的使用分享。如果大家有更好的想法,也歡迎大家加我好友交流分享哈。

作者:良知猶存,白天努力工作,晚上原創(chuàng)公號號主。公眾號內(nèi)容除了技術(shù)還有些人生感悟,一個認真輸出內(nèi)容的職場老司機,也是一個技術(shù)之外豐富生活的人,攝影、音樂 and 籃球。關(guān)注我,與我一起同行。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

一個程序員,喜歡寫文章,還喜歡打籃球,也喜歡吉他鋼琴的駁雜之人。日常更新自己,分享包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進步!