Gerrit Code Review 搭建配置

所需軟件

Git:代碼版本管理

Java:最低1.7版本

Gerrit:安裝包是個war包

數(shù)據(jù)庫:Gerrit支持H2(內(nèi)置) / MySQL / PostgreSQL蜓氨,本安裝選擇PostgreSQL豆挽,完全開源且適合大規(guī)模數(shù)據(jù)的部署

身份認(rèn)證:審核的前提是做身份認(rèn)證來登陸Web鸽扁,Gerrit支持OpenID / HTTP / LDAP污呼,本安裝選擇已經(jīng)搭建好的LDAP,但會講解HTTP方式的認(rèn)證舟肉,需要Apache做反向代理。

安裝部分以ubuntu為例

Git安裝

sudo apt-get install git

JDK安裝

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk //當(dāng)前安裝為 jdk1.8.0_101

配置Java環(huán)境變量

PATH黄琼,指定命令搜索路徑,在shell下執(zhí)行命令時整慎,會到PATH變量指定的路徑中查找相應(yīng)命令程序脏款,如java/javac

CLASSPATH,指定類搜索路徑撤师,JVM通過它尋找類

JAVA_HOME拧揽,其他軟件通過它找到j(luò)dk的安裝目錄

vi /etc/profileexportJAVA_HOME=?/usr/java/jdk1.8.0_101/exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATHexportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHsource/etc/profilejava -version

如果安裝了多個jdk,就選擇一個默認(rèn)的

sudoupdate-alternatives --config java

PostgreSQL安裝(目前用現(xiàn)有的Postgre數(shù)據(jù)庫新建數(shù)據(jù)庫和用戶)

sudoapt-get install postgresql

初次安裝后万俗,會默認(rèn)生成名為postgres的Linux系統(tǒng)用戶、數(shù)據(jù)庫和數(shù)據(jù)庫用戶(作為數(shù)據(jù)庫管理員)闰歪,首先修改postgres數(shù)據(jù)庫用戶的密碼,然后增加Gerrit需要的數(shù)據(jù)庫

sudo-u postgres psqlpostgres=# \password postgres(input password twice)postgres=# \q

sudo-u postgres createuser -RDIElPS gerritsudo-u postgres psqlpostgres=# \password gerrit(input password twice)sudo-u postgres createdb -E UTF-8-O gerrit reviewdb

Gerrit安裝

從官網(wǎng)下載Gerrit的安裝包临扮,為了方便改名為gerrit.war教翩,建議創(chuàng)建一個Linux用戶來安裝,本人安裝在gerrit2用戶的review_site目錄下

sudoadduser gerritsudosu gerritjava -jar gerrit.war init-d/home/gerrit/review_site

然后就會進行很多配置饱亿,大部分默認(rèn)即可,要注意的是數(shù)據(jù)庫和身份認(rèn)證钻注,這些配置也可以在安裝完成后在~/review_site/etc/gerrit.config文件中修改配猫。

當(dāng)前gerrit.config配置為:

[gerrit]

basePath = /home/gerrit/git

serverId = 7e182d87-75eb-4046-8547-496b55ea7ad9

canonicalWebUrl =http://gerrit.*****-net.com:8080

[database]

type = postgresql

hostname = 172.17.3.132

database = gerrit

username = gerrit

[auth]

type = LDAP

[ldap]

server =ldap://172.17.3.101

username = svc.jenkins

accountBase = dc=*****-net,dc=com

groupBase = dc=*****-net,dc=com

[receive]

enableSignedPush = false

[sendemail]

smtpServer = 172.17.3.201

smtpUser = svc.jenkins

smtpPass =******* ? ? ? ? ? ? ?//具體為郵件用戶密碼

from=CodeReview*****-net.com> ? ?//發(fā)件人顯示

[container]

user = gerrit

javaHome = /usr/java/jdk1.8.0_101/jre

[sshd]

listenAddress = *:29418

[httpd]

listenUrl = proxy-http://*:8080/

[cache]

directory = cache

配置好gerrit.config文件后泵肄,啟動Gerrit,需要用絕對路徑

/home/gerrit/review_site/bin/gerrit.shstart

在瀏覽器輸入http://localhost:8080彈出Gerrit的頁面腐巢。

登錄管理員

第一次登錄的用戶為管理員賬號系忙,ID為1000000,默認(rèn)只有這個系統(tǒng)管理員才有Create權(quán)限(創(chuàng)建group和Project)

在gerrit本機上使用下面的命令生成管理員賬號(這里將gerrit作為管理員)的公私鑰并將公鑰上傳至gerrit管理員用戶下银还。

ssh-keygen -t rsa #生成sshkey

ls ~/.ssh/ #可查看sshkey

cat ~/.ssh/id_rsa.pub #查看sshkey

Gitlab配置

Gitlab上的項目必須被保護,被保護的項目只允許master權(quán)限的用戶進行push操作戒财,其他用戶無push提交權(quán)限捺弦。

普通用戶沒有直接push的權(quán)限孝扛。需要先review到gerrit上進行審核并commit后幽崩,才能更新到代碼中心倉庫里。

項目賦予gerrit用戶master權(quán)限慌申,給普通用戶只有develop或者reporter權(quán)限。

Gerrit用戶配置

普通用戶登錄gerrit蹄溉,將本機公鑰提交到gerrit,設(shè)置郵箱。

提交gerrit的用戶名和郵箱必須與git配置相同役电。

Jenkins配置

Jenkins系統(tǒng)已經(jīng)創(chuàng)建了管理員賬戶jenkins并安裝了Gerrit Trigger插件和Git plugin插件

在“系統(tǒng)管理”->“插件管理"->”可選插件"->搜索上面兩個插件進行安裝棉胀。

設(shè)置Gerrit Trigger

Add New Server :gerrit.*****-net.com

勾選 Gerrit Server With Default Configurations

配置trigger信息并測試連接

如果上一步在點擊“Test Connection”測試的時候,出現(xiàn)下面報錯:

解決辦法:

管理員登錄gerrit

Projects->List->All-Projects

Projects->Access

Global Capabilities->Stream Events 點擊 Non-Interactive Users

添加Jenkins@zjc.com用戶到 ‘Non-Interactive Users’ 組瓢谢。

Gerrit 和 Jenkins 整合

讓Gerrit支持Jenkins

如果安裝Gerrit時沒有或者沒有選擇添加Verified標(biāo)簽功能[‘lable Verified’]畸写,需要自己添加枯芬。

如下是手動添加Verified標(biāo)簽功能的設(shè)置

[如果在安裝gerrit的時候沒有選擇安裝這個標(biāo)簽功能,就需要在此處手動安裝下千所。具體可以登陸gerrit,ProjectS->list->All-Projects->Access->Edit->Add Permission 看里面是否有Verfied的選項]

# su - gerrit

$ git init cfg; cd cfg

$ git config --globaluser.name'gerrit'

$ git config --global user.email 'gerrit@devops_gerrit'

$ git remote add originssh://gerrit@http://gerrit.*****-net.com:29418/All-Projects

$ git pull origin refs/meta/config

$ vim project.config

[label "Verified"]

function = MaxWithBlock

value = -1 Fails

value = 0 No score

value = +1 Verified

$ git commit -a -m 'Updated permissions'

$ git push origin HEAD:refs/meta/config

$ rm -rf cfg

用gerrit管理員賬號登錄Gerrit

現(xiàn)在提交的Review請求只有Code Review審核最楷,我們要求的是需要Jenkins的Verified和Code Review雙重保障,在 Projects 的 Access 欄里籽孙,針對 Reference: refs/heads/ 項添加 Verified 功能火俄,如下如下:

Projects -> List -> All-Projects

Projects -> Access -> Edit -> 找到 Reference: refs/heads/* 項 -> Add Permission -> Label Verified -> Group Name 里輸入 Non-Interactive Users -> 回車 或者 點擊Add 按鈕 -> 在最下面點擊 Save Changes 保存更改瓜客。

(注意:提前把jenkins用戶添加到Non-Interactive Users組內(nèi))

權(quán)限修改結(jié)果如下:

如不需要經(jīng)過jenkins Verified僅經(jīng)過code review竿开,則去掉Label Verified設(shè)置并暫停jenkins上gerrit trigger服務(wù)。

Gerrit工程建立

登錄gerrit頁面否彩,CreateNewProject嗦随。想讓gitlab上的項目能在gerrit上review的話,必須在gerrit上創(chuàng)建相同的項目肌毅,并有相同的倉庫文件姑原。

需要確認(rèn)gerrit賬戶在gitlab上是否有權(quán)限,如沒有權(quán)限需要在gitlab上為svc.gerrit用戶導(dǎo)入gerrit服務(wù)器的id_rsa.pub

ssh登錄gerrit服務(wù)器

$ /home/gerrit/git

$ rm -rf gerrittest.git

$?git clone --baregit@172.17.3.60:boyang.chen/gerrittest.git

gerrit即存在與gitlab相同的項目笨奠。

Gerrit同步到Gitlab配置

當(dāng)用戶修改文件唤殴,git add、git commit,提交push到gerrit的repo后蔚袍,代碼通過 jenkins 測試配名、人工review后,代碼只是 merge 到了 Gerrit 的 gerrittest項目中宇整,并沒有 merge 到 Gitlab 的 test-project1 項目中芋膘,所以需要當(dāng)Gerrit ?項目倉庫有變化時自動同步到 Gitlab 的 gerrittest 項目倉庫中。

Gerrit 自帶一個 Replication 功能臂拓,同時我們在安裝 Gerrit 時候默認(rèn)安裝了這個 Plugin潜腻。

1、現(xiàn)在只需要添加一個 replication.config 給 Gerrit

$ cd /home/gerrit/etc/

$ vim replication.config為項目配置同步信息

[remote "DCode"]

projects = DCode

url =git@gitlab.*****-net.com:sen.zhao/DCode.git

push = +refs/heads/*:refs/heads/*

push = +refs/tags/*:refs/tags/*

push = +refs/changes/*:refs/changes/*

threads = 3

[remote "ProjectC"]

projects = ProjectC

url =git@gitlab.*****-net.com:boyang.chen/ProjectC.git

push = +refs/heads/*:refs/heads/*

push = +refs/tags/*:refs/tags/*

push = +refs/changes/*:refs/changes/*

threads = 3

[remote "gerrittest"]

projects = gerrittest

url =git@gitlab.*****-net.com:boyang.chen/gerrittest.git

push = +refs/heads/*:refs/heads/*

push = +refs/tags/*:refs/tags/*

push = +refs/changes/*:refs/changes/*

threads = 3

2童番、設(shè)置gerrit用戶的 ~/.ssh/config

$ vim /home/gerrit/.ssh/config

Hostgitlab.*****-net.com

Hostnamegitlab.*****-net.com

Protocol 2

HostKeyAlgorithms ssh-rsa,ssh-dss

上面設(shè)置的~/.ssh/config文件的權(quán)限已定要設(shè)置成600

不然會報錯:“Bad owner or permissions on .ssh/config“

3剃斧、在gerrit用戶的~/.ssh/known_hosts 中,給gitlab服務(wù)器和gerrit服務(wù)器 添加 rsa 密鑰

$ sh -c "ssh-keyscan -t rsagitlab.*****-net.com,172.17.3.60?>> /home/gerrit/.ssh/known_hosts"

$ sh -c "ssh-keygen -H -f /home/gerrit/.ssh/known_hosts"

$ sh -c "ssh-keyscan -t rsa?[gerrit.*****-net.com]:29418,[172.21.129.31]?>> /home/gerrit/.ssh/known_hosts"

$ sh -c "ssh-keygen -H -f /home/gerrit/.ssh/known_hosts"

配置后如下:

重新啟動 Gerrit 服務(wù)

$/home/gerrit/bin/gerrit.sh restart

Gerrit 的復(fù)制功能配置完畢臂容。

在 Jenkins 上對 gerrittest項目創(chuàng)建構(gòu)建任務(wù)

Jenkins上首先安裝git插件:Git Plugin

登陸jenkins根蟹,“系統(tǒng)管理”->“管理插件”->“可選插件”->選擇Git Pluin插件進行安裝

Jenkins上創(chuàng)建項目

添加 gerrittest工程

下面添加url(gerrit項目地址):ssh://svc.jenkins@gerrit.*****-net.com:29418/gerrittest

添加分支:$GERRIT_BRANCH

添加項目具體單元測試build腳本

Gerrit+Jenkins+Gitlab實現(xiàn)code review流程

普通用戶操作:

Git Bash:

1、clone gerrit上項目并下載commit-msg文件:

git clonessh://svc.jenkins@gerrit.*****-net.com:29418/gerrittest&& scp -p -P 29418svc.jenkins@gerrit.*****-net.com:hooks/commit-msg gerrittest/.git/hooks/

2球散、修改本地文件

3散庶、添加修改文件

git add .

4悲龟、提交修改

git commit

輸入提交信息

5、提交push到代碼審核分支:

git push origin HEAD:refs/for/master

Jenkins自動執(zhí)行build,build成功

登錄Gerrit頁面须教,會看到j(luò)enkins自動檢測了提交操作并且執(zhí)行了build操作,build成功羹奉,標(biāo)記Verified +1

開發(fā)者可指定審核人進行Review操作约计,或者管理員及ProjectOwner有權(quán)限進行Review評分迁筛。

可添加或刪除審核人

添加審核人后细卧,審核人會收到郵件提示

開發(fā)者等待審核人提交審核反饋,審核人CodeReview評分+2則通過審核贪庙。

代碼審核者(Administrator,ProjectOwner,CodeReviewer)操作:

收到審核郵件后登陸Gerrit

選擇要進行審核的提交記錄(Open)

經(jīng)過jenkins自動評分Verified時:

不經(jīng)過jenkins進行Verified評分時:

執(zhí)行Submit后止邮,gerrit會自動同步修改到gitlab庫奏窑。

可通過查看replication日志了解同步情況:

其他操作:

gerrit手動同步代碼到gitlab中心倉庫上

[gerrit@devops_gerrit]$ ssh-gerrit gerrit --help//查看幫助屈扎,發(fā)現(xiàn)gerrit COMMAND --help可查找命令幫忙

[gerrit@devops_gerrit]$ ssh-gerrit replication start --help//查看replication同步命令的用法

replication start [PATTERN ...] [--] [--all] [--help (-h)] [--url PATTERN] [--wait]

PATTERN : project name pattern

-- : end of options

--all?: push all known projects

--help (-h) : display this help text

--url PATTERN : pattern to match URL on

--wait : wait for replication to finish before exiting

[gerrit@devops_gerrit]$ ssh-gerrit replication start --all//同步所有工程

重載replication的同步服務(wù)

[gerrit@devops_gerrit]$ ssh-gerrit gerrit plugin reload replication

如果報錯:fatal: remote plugin administration is disabled

解決辦法:

在/home/gerrit/etc/gerrit.config文件里添加下面內(nèi)容:

[plugins]

allowRemoteAdmin = true

然后重啟gerrit服務(wù)即可:

[gerrit@devops_gerrit]$ /home/gerrit/bin/gerrit.sh restart

Stopping Gerrit Code Review: OK

Starting Gerrit Code Review: OK

竅門:

Gitbash Push簡潔操作:

在工程路徑下寫入下面的命令:

$ git config remote.origin.push refs/heads/*:refs/for/*

這行命令的意思是鹰晨,當(dāng)執(zhí)行?push?命令時,將會推送到refs/for/當(dāng)前head所在的分支上漠趁。

設(shè)置之后即可按照之前的方式提交:

提交時

git push origin master或git push??? 即push修改內(nèi)容到refs/for/分支

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忍疾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丸边,更是在濱河造成了極大的恐慌荚孵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骄呼,死亡現(xiàn)場離奇詭異判没,居然都是意外死亡,警方通過查閱死者的電腦和手機嫉沽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門绸硕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂毁,“玉大人,你說我怎么就攤上這事席楚。” “怎么了垮斯?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵甚脉,是天一觀的道長。 經(jīng)常有香客問我牺氨,道長,這世上最難降的妖魔是什么夷狰? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任郊霎,我火速辦了婚禮书劝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘购对。我一直安慰自己,他們只是感情好垂蜗,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布贴见。 她就那樣靜靜地躺著躲株,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徘溢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音曾雕,去河邊找鬼助被。 笑死切诀,一個胖子當(dāng)著我的面吹牛搔弄,可吹牛的內(nèi)容都是我干的顾犹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼擎宝,長吁一口氣:“原來是場噩夢啊……” “哼浑玛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起顾彰,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涨享,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拆又,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栏账,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年竖般,在試婚紗的時候發(fā)現(xiàn)自己被綠了茶鹃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闭翩。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兑障,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情流译,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布叠赦,位于F島的核電站革砸,受9級特大地震影響业岁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笔时,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一允耿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧较锡,春花似錦、人聲如沸低散。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽引镊。三九已至篮条,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赴恨,已是汗流浹背伴栓。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工蚓胸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留除师,地道東北人扔枫。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓短荐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忍宋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容