Gerrit2安裝配置

y37f 9年前發布 | 50K 次閱讀 Gerrit2 Git 版本控制系統

Gerrit是用于Git版本控制系統的代碼審核系統。

下載

當前最新版本的gerrit為2.8.1,從官方下載二進制war包即可。

數據庫設置

gerrit可以使用H2,PostgreSQL,MySql和Oracle數據庫。這個安裝使用PostgreSQL數據庫。

創建gerrit使用的用戶和數據庫:

$ createuser --username=postgres -RDIElPS gerrit2
$ createdb --username=postgres -E UTF-8 -O gerrit2 reviewdb

這里使用PostgreSQL提供的shell工具,也可以登錄PostgreSQL使用psql來CREATE ROLE和CREATE DATABASE。

創建用戶

為gerrit創建單獨的用戶gerrit2,用于運行gerrit,但是禁止gerrit2用戶登錄系統。

# adduser gerrit2
# passwd --delete gerrit2

安裝

切換到gerrit2用戶,使用gerrit2主目錄下的review目錄作為gerrit site的根目錄

# sudo su - gerrit2
# java -jar gerrit-2.8.1.war init -d review

進入交互式安裝,具體的安裝配置如下:

*** Gerrit Code Review 2.8.1
*** 選項中大寫字母為默認選項,如使用默認選項回車即可

Create '/home/gerrit2/review'  [Y/n]? 

*** Git Repositories
*** gerrit用于存儲git倉庫的目錄,相對于根目錄review

Location of Git repositories   [git]: 

*** SQL Database
*** 

Database server type           [h2]: postgresql
Server hostname                [localhost]: 
Server port                    [(postgresql default)]: 
Database name                  [reviewdb]: 
Database username              [gerrit2]: 
gerrit2's password             : 
              confirm password : 

*** User Authentication
*** 使用HTTP認證,OPENID需要服務器連接互聯網,還可以使用LDAP認證服務


Authentication method          [OPENID/?]: http
Get username from custom HTTP header [y/N]? 
SSO logout URL                 : 

*** Email Delivery
*** gerrit發送郵件設置,可以使用本地或遠程SMTP服務器,
*** 只要在smtp服務器上有帳號即可。

SMTP server hostname           [localhost]: mail.openwares.net
SMTP server port               [(default)]: 25
SMTP encryption                [NONE/?]: tls
SMTP username                  [gerrit2]: gerrit2@openwares.net
gerrit2@openwares.net's password : 
              confirm password : 

*** Container Process
*** 使用gerrit2用戶運行gerrit

Run as                         [gerrit2]: 
Java runtime                   [/usr/lib/jvm/java-7-openjdk-amd64/jre]: 
Copy gerrit-2.8.1.war to /home/gerrit2/review/bin/gerrit.war [Y/n]? 
Copying gerrit-2.8.1.war to /home/gerrit2/review/bin/gerrit.war

*** SSH Daemon
*** gerrit自帶的ssh服務,與服務器自身的ssh服務無關,監聽默認端口即可
*** 注意:如要使用低于1024的特權端口,需authbind授權,否則ssh會綁定端口失敗
Listen on address              [*]: 
Listen on port                 [29418]: 

Gerrit Code Review is not shipped with Bouncy Castle Crypto v144
  If available, Gerrit can take advantage of features
  in the library, but will also function without it.
Download and install it now [Y/n]? 
Downloading http://www.bouncycastle.org/download/bcprov-jdk16-144.jar ... OK
Checksum bcprov-jdk16-144.jar OK
Generating SSH host key ... rsa... dsa... done

*** HTTP Daemon
*** 這里使用nginx反向代理gerrit,所以只在loop接口監聽即可。
*** 如果使用域名訪問gerrit,最好將規范URL設置為域名形式,發送校驗郵件時會使用到

Behind reverse proxy           [y/N]? y
Proxy uses SSL (https://)      [y/N]? 
Subdirectory on proxy server   [/]: 
Listen on address              [*]: 127.0.0.1
Listen on port                 [8081]: 
Canonical URL                  [http://127.0.0.1/]:http://review.domain.tld/

*** Plugins
*** 選裝插件

Install plugin download-commands version v2.8.1 [y/N]?
Install plugin reviewnotes version v2.8.1 [y/N]? 
Install plugin replication version v2.8.1 [y/N]? 
Install plugin commit-message-length-validator version v2.8.1 [y/N]? 

Initialized /home/gerrit2/review
Executing /home/gerrit2/review/bin/gerrit.sh start
Starting Gerrit Code Review: 
*** 因為為ssh服務選在了低于1024的端口,且沒有authbind端口授權,所以會出現如下錯誤,高于1024端口不會。
*** FAILED
*** error: cannot start Gerrit: exit status 1
Waiting for server on 127.0.0.1:80 ... OK
*** 服務器上沒有X,所以使用瀏覽器打開連接失敗
Opening http://127.0.0.1/#/admin/projects/ ...FAILED
Open Gerrit with a JavaScript capable browser:

http://127.0.0.1/#/admin/projects/

*** 交互式安裝完畢

gerrit自啟動服務

添加/etc/default/gerritcodereview文件,其內容如下:
GERRIT_SITE=/path/to/gerrit

然后

# ln -sf /home/gerrit2/review/bin/gerrit.sh /etc/init.d/gerrit
# ln -sf /etc/init.d/gerrit /etc/rc3.d/S90gerrit

nginx配置

使用nginx反向代理gerrit,并且nginx承擔http認證,gerrit不會對用戶進行認證。gerrit將http認證成功后第一個 登錄的用戶作為管理員,其他用戶皆為普通用戶。用戶第一次http認證成功后,gerrit會為用戶生成同名的gerrit用戶,只要進一步完善賬戶即 可。比如添加email和公鑰。管理員為其他普通用戶授權。

nginx反向代理配置

server { 
        listen 80;
        server_name review.domain.tld;
        location / {
                auth_basic              "Gerrit2 Code Review";
                auth_basic_user_file    /home/gerrit2/htpasswd.conf;
                proxy_pass              http://127.0.0.1:8081;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
        location /login/ {
                proxy_pass              http://127.0.0.1:8081;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
}

http認證文件

使用htpasswd命令為管理云用戶生成http認證配置文件,如果沒有htpasswd文件需要安裝apache2-utils包。

# htpasswd -d htpasswd.conf admin

以后添加gerrit用戶時,同樣需要先為其配置http認證,然后用戶登錄后gerrit會為其自動生成用戶帳號,名字與http認證名字一致。

賬戶配置

第一次成功登錄的用戶會被gerrit作為管理員用戶。登錄后點擊右上角的”匿名懦夫”Anonymous Coward -> Settings來配置賬戶。

電子郵件

選擇左側Contact Information頁簽,添加用戶全稱。然后注冊新郵件Register New Email,輸入管理員的郵件地址后,gerrit會向新郵箱發送
校驗郵件,校驗通過后才是有效的郵箱。這時候安裝時配置Canonical URL就有用處了,校驗郵件的域名部分就是Canonical URL,如果當時配置的是http://127.0.0.1/,那這時候就要手工修改域名部分再執行驗證了。

發送校驗郵件有時候不太方便,可以使用gerrit提供的遠程ssh shell來為用戶添加有效郵箱。當然首先管理員要添加了SSH公鑰才能遠程訪問gerrit的ssh shell。
語法如下:

# ssh review gerrit set-account --add-email username@openwares.net username

這是review是.ssh/config中配置的遠程ssh主機別名。

也可以通過直接修改gerrit數據庫表的方式來添加用戶郵件,但這活著實有點兒臟,不建議使用。

SSH公鑰

要使用gerrit必須要提供用戶的公鑰。選擇頁面左側的SSH Public Keys為當前用戶添加公鑰。直接將公鑰粘貼到Add SSH Public Key框內,然后點擊add即可。
之后用戶就可以用ssh來訪問gerrit了。當然無法登錄服務器,只能使用gerrit提供的shell。

添加其他普通賬戶

如果采用http認證,那么添加其他賬戶時,需要現添加http認證賬戶。用htpasswd創建的用戶時,并沒有往gerrit中添加賬號,只有 當該用戶通過web登陸gerrit服務器時,該賬號才會被添加進gerrit數據庫中。使用http認證方式,不要使用gerrit ssh shell命令來新增用戶,通過http認證第一次認證成功的用戶,gerrit會為其自動創建賬戶,之后只要完善賬戶就可以了。使用ssh shell創建的用戶無法與http認證后自動創建的用戶關聯起來,即是二者的用戶名是完全一樣的。

其他用戶帳號的配置與管理員的配置方式一樣。

SSH訪問gerrit

添加ssh公鑰后就可以使用ssh來使用gerrit了。

# ssh -p 29418 -i ~/.ssh/id_rsa.gerrit admin@review.domain.tld

如果私鑰名字為id_rsa可以不用使用-i參數。為ssh主機配置別名訪問起來更簡單,~/.ssh/config文件中添加:

Host review
    Hostname    review.domain.tld
    User        admin
    Port        29418
    #如果私鑰名字為id_rsa,可以省略下面一行
    IdentityFile    ~/.ssh/id_rsa.gerrit

這樣ssh訪問gerrit就可以了:

# ssh review
****    Welcome to Gerrit Code Review    ****

  Hi username, you have successfully connected over SSH.

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

  git clone ssh://admin@review.domain.tld:29418/REPOSITORY_NAME.git

Connection to review.tafdc.org closed.

查看gerrit shell幫助

# ssh review gerrit --help
gerrit [COMMAND] [ARG ...] [--] [--help (-h)]

 --          : end of options
 --help (-h) : display this help text

Available commands of gerrit are:

   ban-commit           Ban a commit from a project's repository
   create-account       Create a new batch/role account
   create-group         Create a new account group
   create-project       Create a new project and associated Git repository
   flush-caches         Flush some/all server caches from memory
   gc                   Run Git garbage collection
   gsql                 Administrative interface to active database
   ls-groups            List groups visible to the caller
   ls-members           Lists the members of a given group
   ls-projects          List projects visible to the caller
   ls-user-refs         List refs visible to a specific user
   plugin               
   query                Query the change database
   receive-pack         Standard Git server side command for client side git push
   rename-group         Rename an account group
   review               Verify, approve and/or submit one or more patch sets
   set-account          Change an account's settings
   set-members          Modifies members of specific group or number of groups
   set-project          Change a project's settings
   set-project-parent   Change the project permissions are inherited from
   set-reviewers        Add or remove reviewers on a change
   show-caches          Display current cache statistics
   show-connections     Display active client SSH connections
   show-queue           Display the background work queues, including replication
   stream-events        Monitor events occurring in real time
   test-submit          
   version              Display gerrit version

See 'gerrit COMMAND --help' for more information.

導入現存git代碼庫

最簡單的辦法就是直接將現在的git裸倉庫拷貝到gerrit管理的倉庫目錄下

#cp -r /path/to/old.git /path/to/gerrit/git/

或者稍微繁瑣一些的方法:在gerrit中新建一個project,不要做init commit,然后將新建的倉庫做為已經存在倉庫的遠程倉庫,然后push就可以了。
可以設置gerrit該倉庫不經過審核,就可以直接將整個倉庫push過來了。

gitweb集成

debian系統只要安裝了gitweb包, gerrit就可以自動關聯到gitweb,通過gitweb來瀏覽git倉庫。

# apt-get install gitweb

其他問題

SMTP證書

如果為gerrit配置的SMTP服務器是SSL/TLS加密的,并且SMTP服務器的證書是自簽的,當gerrit試圖發送郵件時會拋出異常:

sun.security.validator.ValidatorException: PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

因為自簽的證書是不受信任的,最簡單的解決辦法就是告訴gerrit不要校驗STMP服務的證書:

編輯~/review/etc/gerrit.config,添加:

[sendmail]
    sslverify=false

或者更復雜的解決辦法,將SMTP的SSL證書添加到JAVA的truststore里,參考[3]里有對此問題的詳細描述。

Sign Out

使用http認證登錄gerrit后,并無法通過點擊”Sign Out”退出登錄,只能通過直接關閉瀏覽器窗口來退出當前會話。

如果需要重新安裝gerrit,記得將數據庫drop掉再重新創建。

References:
[1]Gerrit Code Review for Git
[2]烤鴨的gerrit使用總結
[3]代碼評審系統 ReviewBoard 和 Gerrit (下)

===
All governments should be pressured to correct their abuses of human rights. --- Richard Stallman

 本文由用戶 y37f 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!