建立repo服務器二(建立apache服務,gerrit 3.1.0和gitweb代碼審查工具)

參考:https://gerrit-review.googlesource.com/Documentation/install.html

一、Gerrit的簡介

Gerrit是Google開源的一套基於web的代碼review工具,它是基於git的版本管理系統。Google開源Gerrit旨在提供一個輕量級框架,用於在代碼入庫之前對每個提交進行審閱。每個修改都將提交到gerrit上,但實際上沒有真正意義的成爲項目的一部分,直到提交被管理員review和submit。它是標準開源過程的一個簡單工具來支持提交補丁程序,然後由項目成員在應用到代碼庫之前進行review。

二、Gerrit的搭建步驟

  1. 安裝java環境
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update    
sudo apt-get install openjdk-7-jdk

這個是openjdk,使用標準jdk也可以jdk-8u161-linux-x64.tar.gz

    2、安裝配置Apache2

  • 下載Apache2
    sudo apt-get install apache2
  • 修改配置文件,後面會用到Apache的反射
    sudo vi /etc/apache2/httpd.conf 這種方式是通過vi在命令裏面修改
    或者
    sudo gedit /etc/apache2/httpd.conf 這種方式是通過打開一個文本編輯器進行修改
  • 具體的修改的內容如下,我寫了註釋的地方需要注意根據自己的需求進行修改
<VirtualHost *:8081>  //這裏是反射代理的端口號,
     
    ServerName 10.180.152.83    //這裏是填寫Apache反射代理的ip地址,也就是你服務器的ip地址
 
    ProxyRequests Off  
    ProxyVia Off
    ProxyPreserveHost On
 
    <Proxy *>
          Order deny,allow
          Allow from all
    </Proxy>
 
    <Location "/login/">
        AuthType Basic
        AuthName "Gerrit Code Review"
        Require valid-user
        AuthBasicProvider file
        AuthUserFile /home/gerrit/review_site/passwords    //這個路徑是gerrit賬戶密碼管理,後續的步驟中會創建此文件。路徑有寫正確
    </Location>
 
    AllowEncodedSlashes On
    
    ProxyPass / http://127.0.0.1:8091/ nocanon  //這裏是代理反射,照着寫就OK了
 
</VirtualHost>

注意:
如果http.conf沒有Include到apache2.conf中,就需要手動添加:
sudo vi /etc/apache2/apache2.conf
添加如下,
Include http.conf
- 修改配置文件,添加對8081端口的監聽:
sudo vi /etc/apache2/ports.conf
添加,
Listen 8081 //這裏的8081端口號是上面配置的Apache2反射端口
- 開啓SSL、Proxy、Rewrite等模塊:
cd /etc/apache2/mods-enabled
在這個路徑下面,輸入下面的命令

sudo ln -s ../mods-available/proxy.load
sudo ln -s ../mods-available/proxy.conf
sudo ln -s ../mods-available/proxy_http.load
sudo ln -s ../mods-available/proxy_balancer.conf
sudo ln -s ../mods-available/proxy_balancer.load
sudo ln -s ../mods-available/rewrite.load
sudo ln -s ../mods-available/ssl.conf
sudo ln -s ../mods-available/ssl.load

以上可能本身就設置好了就查看下就可以。

      3、安裝配置gerrit
      gerrit的最新下載地址:https://www.gerritcodereview.com/
      當前最新版本爲 3.1.0   本教程使用的是gerrit-3.1.0 

  • 進入到下載好的gerrit軟件目錄
    cd home/gerrit/download
  • 安裝解壓下載好的war包
    java -jar gerrit-3.1.0.war init -d ~/review_site 這裏的review_site是解壓出來的包名,最好不要修改。避免不必要的錯誤
  • 安裝的時候,選擇默認配置,一路回車,安裝完成之後。打開瀏覽器輸入 loccalhost:8080就能看到gerrit的界面了。
  • 但是最好不要默認安裝,如下:
  • #java -jar gerrit-3.1.0.war init -d ~/review_site
    Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
    [2019-12-19 13:58:02,378] [main] INFO  com.google.gerrit.server.config.GerritServerConfigProvider : No /home/git/review_site/etc/gerrit.config; assuming defaults
    
    *** Gerrit Code Review 3.1.0
    *** 
    
    Create '/home/git/review_site' [Y/n]? y
    
    *** Git Repositories
    *** 
    
    Location of Git repositories   [git]: /home/git/repositories
    
    *** Index
    *** 
    
    Type                           [lucene]: 
    
    *** User Authentication
    *** 
    
    Authentication method          [openid/?]: HTTP
    Get username from custom HTTP header [y/N]? 
    SSO logout URL                 : 
    Enable signed push support     [y/N]? 
    
    *** Review Labels
    *** 
    
    Install Verified label         [y/N]? 
    
    *** Email Delivery
    *** 
    
    SMTP server hostname           [localhost]: 
    SMTP server port               [(default)]: 
    SMTP encryption                [none/?]: 
    SMTP username                  : 
    
    *** Container Process
    *** 
    
    Run as                         [git]: 
    Java runtime                   [/tools/jdk1.8.0_161/jre]: 
    Copy gerrit-3.1.0.war to /home/git/review_site/bin/gerrit.war [Y/n]? 
    Copying gerrit-3.1.0.war to /home/git/review_site/bin/gerrit.war
    
    *** SSH Daemon
    *** 
    
    Listen on address              [*]: 
    Listen on port                 [29418]: 
    Generating SSH host key ... rsa... ed25519...unknown key type ed25519
     ecdsa 256... ecdsa 384... ecdsa 521... done
    
    *** HTTP Daemon
    *** 
    
    Behind reverse proxy           [y/N]? Y
    Proxy uses SSL (https://)      [y/N]? 
    Subdirectory on proxy server   [/]: 
    Listen on address              [*]: *
    Listen on port                 [8081]: 8091
    Canonical URL                  [http://null/]: http://192.168.0.198:8081/       
    
    *** Cache
    *** 
    
    
    *** Plugins
    *** 
    
    Installing plugins.
    Install plugin codemirror-editor version v3.1.0 [y/N]? Y
    Installed codemirror-editor v3.1.0
    Install plugin commit-message-length-validator version v3.1.0 [y/N]? Y
    Installed commit-message-length-validator v3.1.0
    Install plugin delete-project version v3.1.0 [y/N]? Y
    Installed delete-project v3.1.0
    Install plugin download-commands version v3.1.0 [y/N]? Y
    Installed download-commands v3.1.0
    Install plugin gitiles version v3.1.0 [y/N]? Y
    Installed gitiles v3.1.0
    Install plugin hooks version v3.1.0 [y/N]? Y
    Installed hooks v3.1.0
    Install plugin plugin-manager version v3.1.0 [y/N]? Y
    Installed plugin-manager v3.1.0
    Install plugin replication version v3.1.0 [y/N]? Y
    Installed replication v3.1.0
    Install plugin reviewnotes version v3.1.0 [y/N]? Y
    Installed reviewnotes v3.1.0
    Install plugin singleusergroup version v3.1.0 [y/N]? Y
    Installed singleusergroup v3.1.0
    Install plugin webhooks version v3.1.0 [y/N]? Y
    Installed webhooks v3.1.0
    Initializing plugins.
    
    Initialized /home/git/review_site
    Init complete, reindexing projects with: reindex --site-path /home/git/review_site --threads 1 --index projects
    Reindexing projects:    100% (39/39)
    Reindexed 39 documents in projects index in 1.0s (38.1/s)
    Executing /home/git/review_site/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/git/review_site/bin/gerrit.sh not being run as root.
             Consider changing the OOM score adjustment manually for Gerrit's PID=3571 with e.g.:
             echo '-1000' | sudo tee /proc/3571/oom_score_adj
    FAILED
    error: cannot start Gerrit: exit status 1
    Waiting for server on 192.168.0.198:80 ... OK
    Opening http://192.168.0.198/#/admin/projects/ ...OK

     

  • 當然了,作爲一名優秀的程序員,我們不能止步於默認配置。所以,我們對配置文件進行按需修改
    sudo vi ~/review_site/etc/gerrit.config
  • #sudo vi ~/review_site/etc/gerrit.config
    
    [gerrit]
            basePath = /home/git/repositories
            canonicalWebUrl = http://192.168.0.198:8081/
            serverId = 0e067cd7-94c4-44f1-aa68-0a73873adc45
    [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 = git
            javaHome = /tools/jdk1.8.0_161/jre
    [index]
            type = lucene
    [auth]
            type = HTTP
    [receive]
            enableSignedPush = false
    [sendemail]
            smtpServer = localhost
    [sshd]
            listenAddress = *:29418
    [httpd]
            listenUrl = proxy-http://*:8091/
    [cache]
            directory = cache
    

    具體的修改內容如下:
  • [gerrit]
            basePath = git    //這裏是配置gerrit項目管理倉庫的名字。可以所以修改
            serverId = 02481fa0-9b63-4b6a-9869-8b4e2a4364ee
            canonicalWebUrl = http://110.180.152.83:8081/    //這裏就是打開gerrit管理系統的地址了。這個地方和前面配置的Apache2的反射文件要一致
    [database]
            type = h2    //這裏是選擇數據庫,gerrit支持h2/mysql/postsql三種,一般不是那種超級大型的團隊管理,我們選擇h2就夠用了。
            database = /home/gerrit/review_site/db/ReviewDB  //這裏是數據庫的位置
    [auth]  
            type = HTTP    //這裏一定要改,改成HTTP的方式。
    [receive]
            enableSignedPush = false
    [sendemail]    //這裏是郵箱配置,如果是公司內網,發送郵件不方便的話,可以配置爲sendemail = fasle就行了。後面我會教大家,繞過郵箱認證賬號的方法。
            smtpServer = smtp.company.com
            smtpServerPort = ***
            smtpEncryption = ssl 
            smtpUser = [email protected]  //這裏填寫要發送驗證信息的郵箱
            smtpPass = ******    //這裏輸密碼
            sslVerify = false 
            from = Code Review < [email protected] >  //填寫郵箱
    [container]
            user = gerrit  //這裏不要改動,選擇gerrit登陸
            javaHome = /usr/lib/jvm/java-7-openjdk-amd64/jre  //這裏是默認選擇的Java路徑
    [sshd]
            listenAddress = *:29418    //這裏不準改,這裏就選擇默認的29418
    [httpd]
            listenUrl = proxy-http://*:8091/    //這裏修改端口,*可以替換成對應的ip也可以不換
    [cache]
            directory = cache
    
    [http]
            proxy = http://192.168.0.198:8080
            proxyUsername = git
            proxyPassword = git

     

  •  basePath = git    //這裏是配置gerrit項目管理倉庫的名字。可以所以修改,  
  •  當發現改變這個倉庫目錄後,啓動gerrit時Starting Gerrit Code Review: FAILED ,這是因爲你添加的目錄裏面沒有默認的All-Projects.git  All-Users.git 這2個倉庫,將這2個倉庫拷貝過去後可解決這個問題。
  • 配置一個gerrit的管理員賬號:
    touch ~/review_site/passwords //這個文件就是上面Apache配置的賬號路徑
    sudo htpasswd -b ~/review_site/passwords admin admin //新增賬號admin和密碼
  • 安裝配置gitweb
    • 下載安裝gitweb
      sudo apt-get install gitweb
    • 查看相關配置文件的安裝路徑
      dpkg -L gitweb
      得到輸出如下:
  •  

/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/gitweb
/usr/share/doc/gitweb/examples
/usr/share/doc/gitweb/examples/index.aux-generation
/usr/share/doc/gitweb/README.Debian
/usr/share/doc/gitweb/copyright
/usr/share/doc/gitweb/README
/usr/share/doc/gitweb/NEWS.Debian.gz
/usr/lib
/usr/lib/cgi-bin
/etc
/etc/apache2
/etc/apache2/conf.d
/etc/apache2/conf.d/gitweb
/etc/gitweb.conf
/usr/share/doc/gitweb/changelog.Debian.gz
/usr/lib/cgi-bin/gitweb.cgi

打開gerrit的config:
sudo gedit ~/review_site/etc/gerrit.config
添加從上面路徑的最後一行

[gitweb]
    type = gitweb
    cgi = /usr/lib/cgi-bin/gitweb.cgi
  1. 重啓gerrit和Apache2
sudo ~/review_site/bin/gerrit.sh restart
sudo /etc/init.d/apache2 restart
  1. 訪問gerrit管理界面
    瀏覽器輸入:
    http://192.168.130.10:8081/

設置gerrit自啓動

在它的下面有個 bin/gerrit.sh文件

把這個文件拷貝到/etc/init.d下 改名叫做 gerrit

然後用sysv-rc-conf工具,這個沒有可以直接apt-get install進行安裝

然後執行sysv-rc-conf,找到gerrit的那一行,我把2~5都X上

然後重啓下系統,/etc/rc*.d下面就都有對應的文件了,我這裏是S20gerrit文件

不知道要不要重啓,反正重啓一下保險點

然後一般安裝gerrit的時候都建立了一個新的用戶,我把安裝目錄給放到新用戶下面了

在我自己的用戶下面沒有寫權限,就給把那個用戶chmod 777 -R了

然後在/etc/init.d/gerrit腳本里把GERRIT_SITE給設置一下

這裏,我用 都是修改GERRIT_SITE_1的值爲絕對路徑GERRIT_SITE_1="/home/git/review_site"

然後重啓,gerrit這個服務就已經啓動了
以上測試不成功:

方法1

1.通過如下步驟設置gerrit服務開機自啓動:

1

2

3

4

5

sudo ln -snf /home/gerrit/review_site/bin/gerrit.sh /etc/init.d/gerrit.sh

 

sduo ln -snf /etc/init.d/gerrit.sh /etc/rc2.d/S90gerrit

 

sduo ln -snf /etc/init.d/gerrit.sh /etc/rc3.d/S90gerrit

2.服務自動啓動腳本/etc/init.d/gerrit.sh需要通過/etc/default/gerritcodereview(該申明被卸載gerrit.sh腳本里面)文件來提供一些配置。該文件的內容爲:

1

2

3

GERRIT_SITE=/home/gerrit/review_site

 

NO_START=0

3.如果不能啓動,可能需要查看下權限

1

update-rc.d gerrit2 defaults

實際操作:

sudo ln -snf /home/gerrit/review_site/bin/gerrit.sh /etc/init.d/gerrit

然後用sysv-rc-conf工具,這個沒有可以直接apt-get install進行安裝

然後執行sysv-rc-conf,找到gerrit的那一行,我把2~5都X上

sudo vi /etc/default/gerritcodereview 

寫入

GERRIT_SITE=/home/gerrit/review_site

NO_START=0

保存後重啓,成功

三、問題與總結

Q1: gerrit服務器搭在公司內部局域網,沒有辦法發送外部郵箱進行賬號驗證怎麼辦?
A1: 我們可以直接遠程操作數據庫進行修改賬號的郵箱地址,具體方法如下:
- 爲ssh的主機配置設置別名,在~/.ssh/config文件中添加:

Host review
    Hostname    10.180.152.81
    User        admin    //這個名字要和網站上管理員的名字相同
    Port        29418
    IdentityFile    ~/.ssh/id_rsa

這樣就可以簡單通過ssh訪問gerritl了。效果如下:

# 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://[email protected]:29418/REPOSITORY_NAME.git
Connection to review.tafdc.org closed.

然後,通過ssh遠程連接gerrit進行賬號郵箱的配置。
ssh review gerrit set-account --add-email xxxxx@郵箱 admin


Q2:訪問出現:

 

Q3:

Starting Gerrit Code Review: FAILED

1、因爲8081端口和Apache2 重複了,嚴格按以上配置,8091的地方不要改成8081

2、端口沒有問題,還是不行

查看錯誤日誌: cat ~/review_site/logs/error_log

1) No index versions ready; run Reindex

1 error
        at com.google.gerrit.lucene.LuceneVersionManager.start(LuceneVersionManager.java:118)
        at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:74)
        at com.google.gerrit.pgm.Daemon.start(Daemon.java:293)
        at com.google.gerrit.pgm.Daemon.run(Daemon.java:205)
        at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:64)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:166)
        at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:93)
        at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:50)
        at Main.main(Main.java:25)

使用reindex解決:java -jar ~/gerrit-2.11.war reindex -d ~/review_site/

java -jar ~/gerrit-2.11.war reindex -d ~/review_site/
[2019-12-09 14:48:59,845] INFO  com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 220m
[2019-12-09 14:49:00,452] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /home/git/review_site/cache
Reindexing changes: done    
Reindexed 0 changes in 0.0s (0.0/s)
[2019-12-09 14:49:01,895] WARN  com.google.gerrit.server.cache.h2.H2CacheImpl : Cannot build BloomFilter for jdbc:h2:file:/home/git/review_site/cache/diff_intraline
org.h2.jdbc.JdbcSQLException: Error opening database: "Sleep interrupted" [8000-174]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
        at org.h2.message.DbException.get(DbException.java:161)
        at org.h2.store.FileLock.getExceptionFatal(FileLock.java:450)
        at org.h2.store.FileLock.sleep(FileLock.java:445)
        at org.h2.store.FileLock.lockFile(FileLock.java:348)
        at org.h2.store.FileLock.lock(FileLock.java:133)
        at org.h2.engine.Database.open(Database.java:575)
        at org.h2.engine.Database.openDatabase(Database.java:236)
        at org.h2.engine.Database.<init>(Database.java:231)
        at org.h2.engine.Engine.openSession(Engine.java:56)
        at org.h2.engine.Engine.openSession(Engine.java:160)
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:139)
        at org.h2.engine.Engine.createSession(Engine.java:122)
        at org.h2.engine.Engine.createSession(Engine.java:28)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:323)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:105)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90)
        at org.h2.Driver.connect(Driver.java:73)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlHandle.<init>(H2CacheImpl.java:636)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.acquire(H2CacheImpl.java:604)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.buildBloomFilter(H2CacheImpl.java:365)
        at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.open(H2CacheImpl.java:337)
        at com.google.gerrit.server.cache.h2.H2CacheImpl.start(H2CacheImpl.java:167)
        at com.google.gerrit.server.cache.h2.H2CacheFactory$1.run(H2CacheFactory.java:113)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.InterruptedException: sleep interrupted
        at java.lang.Thread.sleep(Native Method)
        at org.h2.store.FileLock.sleep(FileLock.java:443)
        ... 23 more
[2019-12-09 14:49:01,902] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Finishing 4 disk cache updates

#sudo ~/review_site/bin/gerrit.sh restart

Stopping Gerrit Code Review: start-stop-daemon: warning: failed to kill 4558: No such process
1 pids were not killed
No process in pidfile '/home/git/review_site/logs/gerrit.pid' found running; none killed.
OK
Starting Gerrit Code Review: 
OK

Q3:登錄網頁顯示如下:

解決辦法:

touch ~/review_site/passwords //這個文件就是上面Apache配置的賬號路徑
sudo htpasswd -b ~/review_site/passwords admin admin //新增賬號admin和密碼

sudo /etc/init.d/apache2 restart

Q4:gerrit網頁創建項目後沒有下載地址,沒有下圖界面:

原因:安裝的時候我使用的是默認安裝
java -jar gerrit.war init --batch -d /gerrit
沒有安裝插件download-commands

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章