建立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

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