Gerrit 配置-用戶配置


環境:

gerrit server :176.23.47.118

管理員機器用戶名:  su admin

gerrit 的管理員賬號:admin

gerrit 工作流程


 gerrit工作流程的圖:

使用過git的同學,都知道,當我們git add --> git commit --> git push 之后,你的代碼會被直接提交到repo,也就是代碼倉庫中,就是圖中橘紅色箭頭指示的那樣。

那么gerrit就是上圖中的那只鳥,普通成員的代碼是被先push到gerrit服務器上,然后由代碼審核人員,就是左上角的integrator在web頁面進行代碼的審核(review),可以單人審核,也可以邀請其他成員一同審核,當代碼審核通過(approve)之后,這次代碼才會被提交(submit)到代碼倉庫(repo)中去。

無論有新的代碼提交待審核,代碼審核通過或被拒絕,代碼提交者(Contributor)和所有的相關代碼審核人員(Integrator)都會收到郵件提醒。
gerrit還有自動測試的功能,和主線有沖突或者測試不通過的代碼,是會被直接拒絕掉的,這個功能似乎就是右下角那個老頭(Jenkins)的任務。

整個流程就是這樣。 在使用過程中,有兩點需要特別注意下:

  • 當進行commit時,必須要生成一個Change-Id,否則,push到gerrit服務器時,會收到一個錯誤提醒。
  • 提交者不能直接把代碼推到遠程的master主線(或者其他遠程分支)上去。這樣就相當於越過了gerrit了。 gerrit必須依賴於一個refs/for/*的分支。

    假如我們遠程只有一個master主線,那么只有當你的代碼被提交到refs/for/master分支時,gerrit才會知道,我收到了一個需要審核的代碼推送,需要通知審核員來審核代碼了。
    當審核通過之后,gerrit會自動將這條分支合並到master主線上,然后郵件通知相關成員,master分支有更新,需要的成員再去pull就好了。而且這條refs/for/master分支,是透明的,也就是說普通成員其實是不需要知道這條線的,如果你正確配置了sourceTree,你也應該是看不到這條線的。

這兩點很重要!!這兩點很重要!!這兩點很重要!!

為管理員admin配置SSH Public Keys:

第一個Gerrit 賬戶自動成為權限最高的管理員,因為Gerrit 安裝完畢后第一件事就是立即注冊或者登錄,以便初始化管理員賬號


這里需要把你的公鑰鑰匙拷貝出來,然后粘貼在對話中

生成公私鑰對


 

首先切換到 admin用戶下 ,在命令行中輸入: 

[root@localhost home]# su admin
[admin@localhost home]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.

找到公鑰鑰匙:


   默認公私鑰的是放置在~/.ssh目錄下的,默認的名稱是id_rsaid_rsa.pub。其中.pub文件就是公鑰,私鑰你自己需要保存好。我們要做的,就是把公鑰的內容拷貝出來,然后粘貼到頁面上去。注意拷貝時,要從RSA開始拷貝,如果格式不對,頁面上會有提示。拷貝完成之后如下圖所示:

測試SSH key是否提交成功,在client 服務器上執行以下命令:

#ssh -p 29418 admin@ip地址 

ps:一定要切換到你生成 公鑰私鑰的用戶下 gerrit, 29418為gerrit上SSH服務器監聽的端口,admin為登錄的gerrit賬號(admin 賬號為我的管理員賬號),並且該賬號已經登錄了gerrit服務器,而且公鑰已經上傳。

176.23.47.118為gerrit服務器的IP

[root@localhost .ssh]# su gerrit
[gerrit@localhost .ssh]$ ssh -p 29418 admin@176.23.47.118

  ****    Welcome to Gerrit Code Review    ****

  Hi admin, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://admin@localhost:29418/REPOSITORY_NAME.git

在gerrit服務器上創建普通用戶:

Linux下的用戶名須和管理員給的Gerrit賬號名相同,如果沒有,請添加新用戶:


 Gerrit服務器使用的是HTTP認證類型,並用nginx做反向代理,創建用戶使用以下命令:

[root@localhost .ssh]# htpasswd -m /home/gerrit/gerrit.password  tana
New password: 
Re-type new password: 
Updating password for user tana

創建普通用戶 tana ,在gerrit網頁登錄進去,按照配置admin的路徑 給tana用戶配置ssh keys。

[tana@localhost ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tana/.ssh/id_rsa): 
Created directory '/home/tana/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tana/.ssh/id_rsa.
Your public key has been saved in /home/tana/.ssh/id_rsa.pub.

配置成功后下圖所示:

管理員訪問SSH的管理接口


 在gerrit個人配置界面中設置了公鑰之后,就可以連接Gerrit的ssh服務器執行命令。注意遠程gerrit服務器的端口不要被防火牆攔截,gerrit的ssh服務器使用的特殊的端口,默認是29418,任何用戶都可以通過 ssh連接執行 ls-projects 命令查看項目列表

[tana@localhost root]$ ssh -p 29418 176.23.47.118 gerrit ls-projects
All-Projects
All-Users
projec1
test3

通過ssh 創建新項目:

管理員admin 可以使用命令行創建新項目 test3:

[admin@localhost root]$ ssh -p 29418 176.23.47.118 gerrit create-project test3

創建group並創建一個project


圖片是gerrit默認的分組,之后我們還可以建立新的分組,加入新的成員

 注意,只有管理員組的用戶才能創建group和Project

創建一個group


 登錄Gerrit管理員賬號admin,創建一個新的組為test1。並將tana賬號加入該組

 

 

 

創建一個project


 創建一個project1 :BROWSE->Repositores->CREATE NEW

BROWSE->Repositores->Access->ADD REFERENCE->ADD

tana用戶clone工程


 clone工程到本地


切換到tana用戶上,下拉剛剛創建的 projec1工程:

執行命令:#git clone ssh://tana@176.23.47.118:29418/projec1.git

[tana@localhost ~]$ git clone "ssh://tana@172.23.57.119:29418/project5" && scp -p -P 29418 tana@172.23.57.119:hooks/commit-msg "project5/.git/hooks/"
Initialized empty Git repository in /home/tana/project5/.git/
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), done.
commit-msg 100% 1791 1.8KB/s 00:00

[tana@localhost ~]$ ls 

project5

進入到/home/tana/中,我們發現多了一個 projec1的文件夾。這個文件夾就是我們下拉下來的projec1 工程了

下面新建一個 test.md文件 ,嘗試着提交:

提交


 首先我們通過下面兩個命令首先commit到本地倉庫:

[tana@localhost ~]$ cd /home/tana/projec1/
[tana@localhost projec1]$ vim test.md
just for test
"test.md" [New] 1L, 14C written                                                                      
[tana@localhost projec1]$ git add test.md 
[tana@localhost projec1]$ git commit

我們把這次提交命名為 test 20190419 commit

 然后我們通過git push命令來推送,發送推送失敗了,錯誤如下:

 

我們設置了push命令之后,重新進行push,結果報錯了。。這次是報 郵箱沒有注冊,下面我們來配置郵箱。

配置郵箱


修改gerrit.config配置文件

注意: smtppass是郵箱的授權碼密碼,不是你的登錄密碼,授權碼需要在郵件網頁端登錄設置,允許第三方客戶端登錄

 from 是發送注冊郵箱的

用戶綁定郵箱


 登錄到 gerrit上面去,settings->Email Addresses 去設置注冊郵箱:

輸入你的郵箱地址,注意每個用戶的郵箱地址都是唯一的,不能多個用戶用同一個郵箱注冊

 

然后登錄郵箱,點擊鏈接進行注冊:

 點擊鏈接注冊成功以后,我們可以在 settings->Profile 看到有郵箱地址了

配置commit 的名稱和email


 在commit的時候,發現提交者的名稱和email都是錯誤的,我們需要先配置成我們當前的tana用戶,以及對應的email

[tana@localhost projec1]$ git config user.name tana
[tana@localhost projec1]$ git config user.email ytyt@cypress.com

通過git config --list來查看一下當前git倉庫的配置,發現已經把用戶名和密碼正確設置了。

然后我們通過git push命令來推送:

 

Gerrit拒絕了我們直接提交到master的推送!

這就是我們在文章開頭提到的問題,我們需要push到refs/for/master那條線上!!

我們在命令行寫入下面的命令:

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

這行命令的意思是,當執行push命令時,將會推送到refs/for/當前head所在的分支上。

 然后再執行git push命令:

這次的錯誤是:

這個是提到的第2個問題,commit一定要有Change-Id
然后我們看到了命令行中給了我們提示,我們可以從hooks文件中拷貝commit-msg文件下來,這樣commit時,會自動幫我們生成Change-Id.

我們在命令行寫入下面的命令:

我們可以看一下 git rev-parse --git-dir就是指向的當前git配置的文件,就是.git文件夾
所以我們直接用scp命令從gerrit服務器上拉取當前用戶的hooks文件。

注意這個命令要在project5文件夾上一層目錄做:/home/tana

[tana@localhost ~]$ scp -p -P 29418 tana@172.23.57.119:hooks/commit-msg "project5/.git/hooks/"
commit-msg 100% 1791 1.8KB/s 00:00

然后后我們重新push發現一樣的錯誤,因為我們還停留在上次commit,上次的commit是沒有生成Change-Id的! 但是我們回退一下,然后重新提交。
回退命令是先用git log找到上一次的commit id, 然后用git reset --hard 找到的id命令回退,還是不行,不知道什么原因,我把整個工程刪除,直接在 clone的時候就拉取當前用戶的hooks文件。

 

 

 

參考文獻:


免責聲明!

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



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