Gerrit 配置-用戶配置

環境:html

gerrit server :176.23.47.118nginx

管理員機器用戶名:  su admingit

gerrit 的管理員帳號:admingithub

gerrit 工做流程


 gerrit工做流程的圖:web

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

那麼gerrit就是上圖中的那隻鳥,普通成員的代碼是被先push到gerrit服務器上,而後由代碼審覈人員,就是左上角的integrator在web頁面進行代碼的審覈(review),能夠單人審覈,也能夠邀請其餘成員一同審覈,當代碼審覈經過(approve)以後,此次代碼纔會被提交(submit)到代碼倉庫(repo)中去。vim

不管有新的代碼提交待審覈,代碼審覈經過或被拒絕,代碼提交者(Contributor)和全部的相關代碼審覈人員(Integrator)都會收到郵件提醒。
gerrit還有自動測試的功能,和主線有衝突或者測試不經過的代碼,是會被直接拒絕掉的,這個功能彷佛就是右下角那個老頭(Jenkins)的任務。api

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

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

    假如咱們遠程只有一個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文件。

 

 

 

參考文獻:

相關文章
相關標籤/搜索