㳟祝202205026 gerrit 公司9周年生日

一、 centos 安装 Gerrit 搭建

Gerrit 是一个基于 web 的代码评审工具, 它基于 git 版本控制系统。Gerrit 旨在提供一个轻量级框架, 用于在代码入库之前对每个提交进行审阅。‎Gerrit记录每一次提交的代码修改 , 但实际上并不成为项目的一部分, 直到它们被审阅和接受。它是标准开源过程的一个简单工具来支持提交补丁程序, 然后由项目成员在应用到代码库之前进行评审。‎Gerrit 首先是一个临时区域, 在提交的代码成为代码库的一部分之前, 可以对其修改进行检查。因此,在项目开发过程中我们为了保证代码的质量,我们就可以通过Gerrit来review别人的代码了,等所有人review后代码才能提交到仓库。

下边我们说下怎么在linux环境下搭建gerrit,以及在搭建过程中遇见的坑。

大致步骤:

  • 安装git
  • 安装jdk
  • 安装apach2
  • 安装gerrit
  • 配置
  • 验证

安装git

apt-get install git

安装JDK

1、下载链接: https://pan.baidu.com/s/1eKjmwNXL7i-BvG76kq_cag 提取码: ijan 

2、安装

在/usr/ 目录下新建一个java文件夹,将下载好的jdk移动到/usr/java下。
解压:tar -zxvf jdk-**.tar.gz
解压完成后删除jdk的安装包

3、配置环境

(1)在终端中输入命令

sudo vim /etc/profile

(2)在文件末尾加入

JAVA_HOME=/usr/java/jdk1.8.0_152
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH 
export JAVA_HOME CLASSPATH PATH

(3)保存退出后,执行下面命令,让profile文件生效

source /etc/profile

(4)验证是否安装成功

java -version

安装apache2

apache2服务器是用来做反向代理用的。由于使用我们后面在安装Gerrit时选择的认证方式为http,需要用apache2来做一个反向代理。

1. 安装apache2

sudo apt-get install apache2

2.验证是否安装成功

sudo /etc/init.d/apache2 start

如果出现下面的提示,说明以已经安装启动成功。

[ ok ] Starting apache2 (via systemctl): apache2.service.

安装gerrit

下载链接: https://pan.baidu.com/s/1Zgk450iQP3ADmwLpXrLqGQ 提取码: 7j4s,或者自行去官网下载

下面开始安装。你可以创建一个单独的账户来安装gerrit,也可以直接在当前用户环境下安装。我选择的是就在当前用户环境下安装。

选择自己专门放安装软件的目录,将下载好的war包复制进去,然后执行

java -jar gerrit-xxx.war init -d gerrit_site

gerrit_site是安装后文件目录名。
执行完这行命令,会出现安装提示:

Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2017-12-06 16:34:16,022] [main] INFO  com.google.gerrit.server.config.GerritServerConfigProvider : No /home/huanglin/Software/test/etc/gerrit.config; assuming defaults

*** Gerrit Code Review 2.14.6
*** 

Create '/home/huanglin/Software/test' [Y/n]? y

*** Git Repositories
*** 

Location of Git repositories   [git]:  

*** SQL Database
*** 

Database server type           [h2]: 

*** Index
*** 

Type                           [lucene/?]: 

*** User Authentication
*** 

Authentication method          [openid/?]: http(选择http的认证方式,避免使用默认openid,需要fq的)
Get username from custom HTTP header [y/N]? 
SSO logout URL                 : 
Enable signed push support     [y/N]? 

*** Review Labels
*** 

Install Verified label         [y/N]? y(这里写y,方便后续使用Jenkins做持续集成)

*** Email Delivery
*** 

SMTP server hostname           [localhost]: 
SMTP server port               [(default)]: 
SMTP encryption                [none/?]: 
SMTP username                  : 

*** Container Process
*** 

Run as                         [huanglin]: 
Java runtime                   [/usr/java/jdk1.8.0_152/jre]: 
Copy gerrit-2.14.6.war to test/bin/gerrit.war [Y/n]?  
Copying gerrit-2.14.6.war to test/bin/gerrit.war

*** SSH Daemon
*** 

Listen on address              [*]: 
Listen on port                 [29418]: 
Generating SSH host key ... rsa... dsa... 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]: 
Canonical URL                  [http://huanglin/]: 

*** Cache
*** 


*** Plugins
*** 
***注意这些插件最好都行选择安装,以防后续需要用到的时候没有,还要手动安装。
Installing plugins.
Install plugin commit-message-length-validator version v2.14.6 [y/N]? y
Installed commit-message-length-validator v2.14.6
Install plugin download-commands version v2.14.6 [y/N]? y
Installed download-commands v2.14.6
Install plugin hooks version v2.14.6 [y/N]?
...后面的插件也一直填 y ,按enter执行下一步

配置

1.修改gerrit_site/etc/ 下的gerrit.config文件 。把canonicalWebUrl配置为本地服务器(这里就是我的电脑)IP。listenUrl为代理服务器的IP,此处端口配置为了8090。

[gerrit]
        basePath = git
        serverId = ff12fc22-fde9-4db8-9397-81e111d947c2
        canonicalWebUrl = http://**.***.***.**/    //配置成服务器地址,也就是我们的ubuntu地址
[database]
        type = h2
        database = /home/ubuntu/gerrit_site/db/ReviewDB
[auth]
        type = HTTP
[receive]
        enableSignedPush = false
[sendemail]
        smtpServer = localhost
[container]
        user = root
        javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[sshd]
        listenAddress = *:29418
[httpd]
        listenUrl = http://*:8090/    //这个服务器端口名
[cache]
        directory = cache

然后创建Gerrit账户

首先定位到一个目录中,然后,在当前目录下创建账号文件

htpasswd -c httppwd admin

这个的话,就会在当前目录下创建pwd的文件,用户名是admin,然后后边,会在让我们输入密码,首个账号默认是管理员,后续再追加账号我们可以使用:

htpasswd -b httppwd gerrti_1 ******

来创建。

3.配置Apache2反向代理

首先我们得简单了解下Apache2的配置

我们进入到Apache2的根目录(etc/Apache2/),里边有个apache2.conf,我们打开看下其中有一行:

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf
Include httpd.conf

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.

Include ports.conf 这个是apache2监听的端口号

Include httpd.conf 这个是我自己新增配置的,我们新增配置后,都要包含进来,要不就把新增的配置文件放在sites-enabled下,在apache2.conf末尾,把sites-enabled的下的*.conf全部包含进来了。

然后我们看下ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf


Listen 80

Listen 8091


        Listen 443



        Listen 443


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

这里这个 8091 是我自己添加的

然后我们再看下httpd.conf:

    //apache2监听的端口
    ServerName *******    //改成服务器的ip

    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On

    
          Order deny,allow
          Allow from all
    

    
      AuthType Basic
      AuthName "Gerrit Code Review"
      Require valid-user
      AuthBasicProvider file
      AuthUserFile /home/ubuntu/httppwd    //这个配置成我们前边生成的密码文件
    


    AllowEncodedSlashes On
    ProxyPass / http://服务器ip:8090/    //这个才是我们gerrit真正的端口

完成以上步骤,基本就可以了,接下来我们重启gerrit跟apache2

$ /home/ubuntu/gerrit_site/bin/gerrit.sh restart
$ /etc/init.d/apache2 restart

然后我们就打开浏览器输入:ip:8091,这样我们就能正常的访问我们的gerrit了,首次进入输入我们刚才设置的账号。

下边说下为什么通过8091就能访问到我们的Gerrit了呢,这是因为我们使用了Apache2的反向代理的缘故。我们访问ip:8091,这个我们的apache就能监听到此信息,然后通过上边我们配置的ProxyPass / http://服务器ip:8090,apache去访问此地址,也就是我们Gerrit的真实地址,然后将请求到的信息返回给我们,这样我们就能成功的访问到我们的gerrit了。

注意:在配置的过程中,一直碰到这个㳟祝202205026 gerrit 公司9周年生日_第1张图片

 这个搞了我一大天的时间,究其原因,就是Gerrit的账户没有生成对,在访问前我们一定要先生成账户密码。

二、Ubantu 安装 

PART1:环境说明

linux server采用的是ubuntu server12虚拟机(ubuntu-12.04.5-server-amd64.iso,下载地址:)

搭建环境时,linux server ip为192.168.0.188,管理用户为mng
由于linux server对鼠标、图形界面支持不是很友好,在搭建阶段,采用另一台控制主机远程登录的方式进行管理,方便操作
控制主机为192.168.0.55,管理用户为tly

PART2:linux主环境

1. 更新apt源:在控制主机上准备好apt源文件,linux主机上采用通过scp从控制主机获取apt源文件并覆盖到/etc/apt/目录下同名文件
   执行apt-get update更新
2. 安装vim 和 sshd(openssh-server),如果无特殊说明均采用apt-get install 安装,下同
3. 为root用户设置密码(sudo passwd root),编辑/etc/sudoers/ 管理组sudo免密码(%admin ALL=(ALL)NOPASSWD: ALL,%admin ALL=(ALL) NOPASSWD: ALL)
4. 设置server虚拟机网络连接方式为桥接,并设置路由器绑定静态ip给server 188地址
5. 从管理机通过ssh远程登录到server(ssh [email protected]
6. 设置server hostname(),同时更新hosts文件中的域名映射(127.0.1.1  )。特别说明,如果需要安装邮件服务,域名的设置一定不要跳过。

PART3:安装域名服务器

1. 安装bind9
2. 配置bind9(参考)
3. 配置resolv.conf,让dns解析指向域名服务器;因为resolv.conf由resolvconf工具更新,不能直接修改resolv.conf,否则重启配置丢失。
   配置resolvconf,将server的ip地址加入/etc/resolvconf/resolv.conf.d/head中(nameserver 192.168.0.188),重启resolvconf(sudo /etc/init.d/resolvconf restart)
4. 验证:输入nslookup
   在nslookup交互环境中输入可以正常解析,即为OK

PART4:安装邮件服务

1. 安装postfix和mailutils(sudo apt-get install postfix mailutils)
   按默认配置即可
2. 安装完成后,测试(echo “mail installed, send is OK?” | mail -s "test mail send" [email protected]
   可以通过tail -f /var/log/mail* 查看发生日志

PART5:安装geriit

1. 安装git(git-core)
2. 安装java(openjdk-7-jre-headless)
3. 下载gerrit(下载地址:),安装(java -jar gerrit-2.11.war init -d review_site)
   认证方式修改为http,gerrit运行在代理后,其余按默认安装
   修改配置文件(参考 http://blog.csdn.net/ganshuyu/article/details/8978614)
4. 安装apache2(sudo apt-get install --reinstall apache2  apache2.2-commo)

5. 配置apache2
   配置apache2,开启代理功能、复写功能:
          cd /etc/apache2/mods-enabled
          ln -s ../mods-available/proxy.load 
          ln -s ../mods-available/proxy.conf
          ln -s ../mods-available/proxy_http.load
          ln -s ../mods-available/proxy_balancer.conf
          ln -s ../mods-available/proxy_balancer.load
          ln -s ../mods-available/rewrite.load
          ln -s ../mods-available/ssl.conf
          ln -s ../mods-available/ssl.load

   配置apache2的监听端口:
         $: vi /etc/apache2/ports.conf

         ……
     NameVirtualHost *:80
     NameVirtualHost *:8080   -->仿照80端口,加上对8080端口的监听。
     Listen 80
     Listen 8080

   配置反向代理:
         $: sudo vi /etc/apache2/httpd.conf


6. 配置邮件gerrit.config(如果使用本地邮件服务器,不需要配置,如果使用外部邮件服务器需要配置)
[sendemail]  
    smtpServer = smtp.exmail.qq.com
    smtpServerPort = 465  
    smtpEncryption = ssl  
    smtpUser = [email protected]
    smtpPass = xxx
    sslVerify = false  
    from=CodeReview 

7. 添加gerrit用户(htpasswd -cb review_site/etc/passwords mng 123456, -c 是创建passwords文件,后续添加不要使用-c否则会覆盖之前的设置)
8. 设置gerrit服务开机自启动(参考http://blog.csdn.net/xbl1986/article/details/18656887)
   安装sysv-rc-conf,把gerrit初始化目录下~/bin/gerrit.sh 拷贝到/etc/init.d/下重命名为gerrit
   运行sysv-rc-conf,找到gerrit把2、3、4、5勾选上(使用空格)
   配置inti.d/gerrit,修改GERRIT_SITE_1="/home/mng/review_site"
   重启查看是否自启动
 

PART5:注册管理员用户

1. 生成密匙/公匙(ssh-keygen -t rsa, 生成的密匙对在.ssh目录下)
2. 登录到gerrit网页,输入用户名和密码;登录后完成姓名,邮箱注册(发送确认邮件到注册有效,登录状态下,复制邮件中的链接到浏览器,完成确认);添加公匙到gerrit中(cat .ssh/id_rsa.pub,复制显示内容到网页)。

PART6:创建项目

1. 命令行创建项目
   ssh -p 29418 gerrit create-project --empty-commit --name SDK/manifest

  注:删除项目,先删除git目录下的xxx.git,软后执行
   ssh -p 29418 gerrit flush-caches --cache projects
2. 客户端clone项目,修改并提交到评审服务器
   克隆:git clone ssh://192.168.0.188:29418/SDK/manifest.git
   安装commit-msg钩子(服务器开启change-id确认,该钩子用于生成change-id):scp -P 29418 [email protected]:hooks/commit-msg .git/hooks/
   提交:git push origin HEAD:refs/for/master:

PART7:repo

1. 下载repo
    git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git
2. 把repo导入到gerrit服务器,供其他人下载
    在服务器/var/www/目录下,执行git clone --bare  git://aosp.tuna.tsinghua.edu.cn/android/git-repo.gi git-repo.git,完成后使能post-update(cp hooks/post-update.sample hooks/post-update)
    将下载好的repo修改其中REPO_URL指向 gerrit服务器 “http:///git-repo.git”
    将修改的repo脚本复制到/var/www/目录下

三、【Gerrit】Linux+Gerrit+Nginx配置全过程

最近公司的项目打算启用gerrit做为代码审核的工具,最近3天彻底研究了下gerrit的安装配置过程,这里做个记录,期间很多细节都一一记录下来,以便之后有同学需要用到。

这篇博文先介绍下gerrit的安装过程,然后之后还准备写一篇文章,介绍如何利用gerrit和sourceTree进行协同工作,换句话说,就是gerrit的详细工作流程。

开发环境

先记录下我的开发环境以及要正确安装gerrit需要用到的工具:

  • Redhat(CentOS) 6.5
  • Java 1.7.0 (至少1.6以上)
  • git 1.7,1
  • Nginx 1.10.2
  • Apache 2.2.15

几点说明:

  1. 关于操作系统

    Redhat和CentOS用的是同样的内核,我这里是6.5版本的内核;其他linux系统上安装过程照猫画虎应该也差不多,只不过可能比如Java或者Nginx等工具的安装方式有所差别。

    为了方便后面文章的讲解,我们这里假设gerrit服务器的ip地址是 192.168.1.100

  2. 关于Java环境

    在终端中输入 java -version 务必确保你的java环境正确安装了;因为整个gerrit的安装是依赖于Java的,另外最好确保Java版本在 1.6 以上吧,虽然我没有验证过低版本的Java是不是没问题,但是高一点的版本保险一点。

  3. Web服务器

    网上很多教程有讲到gerrit+apache安装过程的,我这里是用nginx。先来说说为什么一定要用apache或者nginx,是的就是为了 反向代理 。

    Gerrit有两种工作方式,我们要采用 http 的工作方式,也就是代码审核人员,可以直接通过Web页面对提交的代码进行评审以及后续的操作。

    然后Gerrit要求不能直接请求其端口,必须要使用反向代理才能正确登录。而我们知道Nginx的成功正在于其高效、轻量级以及 反向代理 ,虽然Apache也有反向代理的功能,但是如果你在安装Apache时没有开启,后续的开启过程要相对复杂一点,而Nginx就简单的多了。

    不过即便我们使用Nginx做为web页面引擎,仍然需要安装Apache,因为我们需要用到apache的一个工具来创建验证密码文件。这个后面我们会看到具体用法。

  4. 数据库

    我们使用gerrit自带的H2数据库。网上也有其他数据库的安装教程,我这里想说的是,H2就够用,而且,我们不推荐直接对数据库进行操作,所有的操作,都可以通过命令行的方式完成,所以,尽量简单我们就使用自带的默认的数据库好了。

所以,请务必确保以上几个工具正确安装。

在RedHat或者CentOS上可以通过 yum 工具来安装,如果yum的源打不开,可以去网上搜一下替换yum源的方法。

安装gerrit

下载gerrit安装包

gerrit的下载地址:

Gerrit Code Review Releases | Gerrit Code Review

我使用的gerrit版本是 2.13.4 。 下载完成之后会发现是一个 war 的包,所以我们的Java环境一定要安装正确。

新建gerrit专用用户

新建一个用户用来专门管理gerrit相关的内容。

在root用户(或者使用 sudo 命令)下面输入下面的命令:

$ adduser gerrit
$ su gerrit

建好用户以后,我们可以把之前下载好的gerrit安装包(gerrit-2.13.4.war)拷贝到 /home/gerrit/ 目录下,一会方便gerrit用户来安装。

安装gerrit

在gerrit用户的目录(/home/gerrit/)下面,执行下面的命令:

$ java -jar gerrit-2.13.4.war init -d ~/gerrit_site

这个命令的意思是执行安装gerrit,会在当前目录下新建一个文件夹 gerrit_site 用来作为gerrit的根目录,在这个目录中,会安装git仓库,以及gerrit的web页面,还有gerrit的bin,etc等文件夹。

然后就开始安装过程了,安装的过程会询问很多问题,有一些判断性的问题会用 [y/N] 这样的形式,大写的字母表示默认,我们直接敲回车就表示采用默认的安装选项。

注意:

  • 我们安装的时候,可以只在 Authentication method 时输入 http ,其他全部回车用默认值,因为其他配置我们待会可以通过 etc/gerrit.config 文件进行修改
  • 期间可能会下载两个文件,这两个文件虽然都很小(不到3M),但是可能是因为GFW的原因,下载速度很慢。你可以到 /lib 文件夹下面查看他们是不是已经下载完了,或者你手动把那两个文件下载完之后,scp到 /lib 下面。
    如果你发现已经下完了,但是安装过程卡主了,没有关系,直接 ctrl+c 然后重新安装就可以了。

下面我就把整个安装过程全部贴出来,加上一些注释,好让大家看清楚都安装了什么:

*** Gerrit Code Review 2.13.4  
***

## git 代码仓库的位置, 默认会在之前敲的init -d 目录下新建一个git文件夹
## 我们回车表示默认地址
*** Git Repositories  
***  

Location of Git repositories   [git]:   

## 数据库类型,我们直接回车表示默认的h2
*** SQL Database  
***  

Database server type           [h2]:   

## 用户认证方式,注意!!!!!这里一定要手动输入 http, 其他的就直接回车
*** User Authentication  
***  

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

## 发送email的配置,这里我们全部回车使用默认,之后通过配置文件进行修改  
*** Email Delivery  
***  

SMTP server hostname           [localhost]:  
SMTP server port               [(default)]:  
SMTP encryption                [NONE/?]:  
SMTP username                  :  


## 剩下的全部回车就好了,全部安装成默认的配置
*** Container Process  
***  

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

*** SSH Daemon  
***  

Listen on address              [*]:  
Listen on port                 [29418]:  

## 这里下载可能会失败,按照我之前说过的方法重新试一遍应该就ok了  
Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v151  
  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/bcpkix-jdk15on-151.jar ...  


## http的反向代理,我们这里先不要设置,一路回车,尽快完成安装
*** HTTP Daemon  
***  
Behind reverse proxy           [y/N]?   
Proxy uses SSL (https://)      [y/N]?  
Subdirectory on proxy server   [/]:  
Listen on address              [*]:  
Listen on port                 [8080]:

// 插件,默认都是不安装的
*** Plugins  
***  

Installing plugins.  
Install plugin download-commands version v2.11 [y/N]?  
Install plugin reviewnotes version v2.11 [y/N]?  
Install plugin singleusergroup version v2.11 [y/N]?  
Install plugin replication version v2.11 [y/N]?  
Install plugin commit-message-length-validator version v2.11 [y/N]?  
Initializing plugins.  
No plugins found with init steps.  

Initialized /home/gerrit_site
...

其实安装过程真的很简单,只是在 Authentication method 方式时输入 http 其他的一路回车下去就好了。

启动gerrit

安装完成之后,gerrit会自动启动,而且会开始监听两个端口:

  • 29418: 默认的ssh端口;
  • 8080: gerrit默认的web页面端口。

我们可以通过下面命令查看:

$ netstat -ltpn | grep -i gerrit

tcp        0      0 :::29418               :::*              LISTEN      49513/GerritCodeRev
tcp        0      0 :::8080                :::*              LISTEN      49513/GerritCodeRev

Nginx

接下来就该Nginx上场了。

在没有配置nginx反向之前,我们直接访问 192.168.1.100:8080/login (我们之前假设gerrit服务器的ip地址是192.168.1.100),会得到一个错误页面,这个页面对于初次使用http方式的gerrit用户可能会让你感到非常。。。绝望,笔者至少看到这个页面不下10多次。。。

就是这样图片:㳟祝202205026 gerrit 公司9周年生日_第2张图片

下面我们就来看一下nginx需要怎样配置吧。

nginx默认配置

我们首先看一看nginx的默认配置。

注意,你的nginx应该是用root账户安装的,否则可能出现权限问题。我们需要从之前的gerrit用户退出来。

在root用户下面,输入下面的命令:

$ cd /etc/nginx/conf.d
$ ls -l

默认的nginx只有一个default.conf文件,是nginx的默认配置文件,我们这里需要新建一个专门用来处理gerrit请求的配置文件,先来看一下我的目录吧:

㳟祝202205026 gerrit 公司9周年生日_第3张图片

我这里新建了一个 gerrit.conf 文件,用来处理gerrit的反向代理。待会我们来看里面需要配置些什么,我们先来研究下nginx默认的配置文件, default.conf 吧。

㳟祝202205026 gerrit 公司9周年生日_第4张图片

 

上面就是默认的配置,看到这里我把端口默认的监听端口设置成了82, 因为80分配给了apache;

然后日志文件的路径在 /var/log/nginx/ 目录下,如果后面登录认证的失败的时候,我们可以在这个目录下面查找日志文件,分析失败的原因。

nginx路径在 /usr/share/nginx/ 路径下,如果我们进到该目录下,查看其下面的index.html文件,就会发现他就是我们在 192.168.1.100:82 页面中看到的关于nginx的介绍的页面。

 㳟祝202205026 gerrit 公司9周年生日_第5张图片

之后还有一些注释掉的关于php的配置部分,这里不做多余的介绍。

gerrit.conf配置

重点来看下我们的 gerrit.conf 文件如何设置。

我们用 vim gerrit.conf 创建这个文件,然后输入下面的内容:

server {
     listen *:81;
     server_name gerrit.microwu.com;
     allow   all;
     deny    all;

     auth_basic "Welcomme to Gerrit Code Review Site!";
     auth_basic_user_file /home/gerrit/gerrit.password;

     location / {
        proxy_pass  http://127.0.0.1:8080;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
     }
   }

最终是这样的:㳟祝202205026 gerrit 公司9周年生日_第6张图片

我们来详细解释几个重点:

  • 我们监听 81 端口,原因和前面一样,80端口被apache占用了,当然你还可以设置成其他没有被占用的端口
  • auth_basic 是用于登录时弹出验证登录对话框,如图:

 㳟祝202205026 gerrit 公司9周年生日_第7张图片

  • 图片中 服务器提示: 后面的文字,就是我们在配置中当前选项的内容

  • auth_basic_user_file 是我们输入用户名和密码之后要去验证是否匹配的文件,看到路径是放在我们的gerrit用户目录下面;这个详细的内容我们一会再来说。

  • location 部分指的的是当用户访问到 192.168.1.100:81 时,要指向的内容,这里面的proxy_pass 字段表示要做的反向代理,指向的是8080,还记得8080端口是谁在用么?对的,就是我们之前新建好的gerrit的web监听端口,也就是说,当用户访问81端口时,nginx直接把这个请求代理到8080端口上去了,这个就是所谓的 反向代理 。

重启nginx

配置好了之后,我们需要重启nginx

$ service nginx restart

然后我们去访问 http://192.168.1.100:81 页面,就能看到和上图一样的登录认证界面了。

登录认证文件

那登录认证有了,我们怎么登录呢??就需要前面的 auth_basic_user_file 文件了。

这里我们需要用apach的 htpasswd 工具来新建这个文件,这也是为什么我们虽然不用到apache的反向代理,仍然需要apache的原因。

我们通过下面的命令来在 /home/gerrit/ 路径下创建认证文件

$ htpasswd -c /home/gerrit/gerrit.password admin

这个命令的详细解释:

  • -c表示create,也就是新建的意思
  • 接下来跟上文件要创建的目录以及文件名,我们直接用绝对路径,表示将在 /home/gerrit 目录下新建一个 gerrit.password 文件
  • 最后的admin表示要写入的用户名

接下来你需要在命令行中连续输入两次密码,我们就为admin用户设置好了密码,可以通过vim来查看下这个密码文件,会发现里面是经过加密的。

如果我们想新建别的用户,或者修改某个用户的密码,只需要把 -c 改成 -m 就好了,如果还是用 -c 并且路径不变的话,就会覆盖掉原来的文件。

例如:我们想要新增一个用户,master,允许其通过页面登录,只需要执行下面的命令就好了

$ htpasswd -m /home/gerrit/gerrit.password master

同样的输入两遍密码,就设置好了master用户的登录密码了。

注意 :

如果你是在root用户下输入上面的命令 创建了 gerrit.password 文件到 /home/gerrit/ 目录中,你会发现在登录的时候永远登录不成功,永远会得到服务器500的错误页面。原因是 /homt/gerrit/ 文件夹的权限问题。

我们知道, /home/gerrit/ 是我们之前新建的gerrit用户的,那么这个文件夹的权限是700,也就是只允许gerrit用户访问,其他组的用户是访问不了的,虽然这个文件的权限拥有root用户的所有权限,但是因为它放在700权限的文件夹下面,所以同样其他用户是访问不到的。

这个问题之前纠缠了我好久,通过nginx的日志可以清楚的看到访问拒绝的错误。

所以,我们需要通过下面的命令,来改变gerrit目录的权限

$ chmod 755 /home/gerrit

这样,当前目录权限就变成了 drwxr-xr-x ,也就是其他组的用户也拥有了读取和执行的权利。

修改gerrit配置

好了,配置好了nginx,我们接下来修改下gerrit的配置,我们要做下面几个事情:

  • 配置SMTP邮件发送
  • 配置反向代理

先来看一下我最终成品图,红框里面的东西是需要我们特别注意的:

㳟祝202205026 gerrit 公司9周年生日_第8张图片

  1. canonicalWebUrl 就是gerrit的主页地址。开篇时,我们假设gerrit服务器的ip地址是 192.168.1.100 ,这里我们就需要设置成 http://192.168.1.100:8080
  2. auth的类型一定要是http,这是我们在安装的时候 唯一 需要手动设置的地方
  3. sendemail选项就是我们的邮件发送设置,如果你的gerrit服务器上没有搭建邮件服务器,那你可以用smtp发件代理,我这里去我们公司的邮箱注册了一个gerrit专用邮箱 [email protected] ,我们公司使用的是阿里云的服务,所以smtp服务器地址是 smtp.mxhichina.com ,端口使用 465 ,因为使用的是 SSL 认证,然后 smtpPass 填写上之前专用邮箱的密码。

    sendemail有什么作用呢?

    • 当有新的允许登录web页面的成员需要修改自己的邮箱时,点击注册邮箱,我们这个专用邮箱就会向该成员申请的邮箱中发送一封确认邮件。
    • 位于Administrator组中的用户,设置了想要watch的项目之后,所有和该项目相关的事件,都能收到一封邮件提醒,发送来自于这个专有邮箱

      具体的细节我们在下一篇文章中再详细介绍

  4. sshd就是ssh监听的端口,这个我们在安装gerrit时采用的是默认的配置,也就是 29418 这个端口
  5. httpd表示反向监听的端口,这里注意要修改成 proxy-http://*:8080/ ,默认值是没有proxy的

重启gerrit

完成上面的配置之后,我们重启一下gerrit

gerrit的可执行文件位于 /home/gerrit/gerrit_site/bin 目录下,我们直接执行

$ /home/gerrit/gerrit_site/bin/gerrit.sh restart

这样,gerrit就会重新启动,并且加载我们刚才修改的配置。

重启完成之后,我们可以在浏览器中输入 192.168.1.100:81 看看是不是可以弹出输入用户名和密码的对话框(如果没有,请检查你的Nginx配置);然后输入正确的用户名(我们创建的密码文件用户是admin)和密码,如果你能登录到这个页面,就表示你的gerrit已经成功配置好了!

 㳟祝202205026 gerrit 公司9周年生日_第9张图片

需要注意的是,gerrit配置了之后,第一个登录成功的用户,自动成为管理员,gerrit会给他分配一个id, 1000000 ,之后登录的成员会依次自增1,初始时 Full Name 和 Email Address字段都是空的。

关于Gerrit的安装和配置Nginx实现反向代理的内容都介绍完了,关于如何使用Gerrit以及Gerrit的工作原理和流程,我们在下一个章节再介绍。

补充内容

卸载Gerrit

如果你的安装过程出错了,或者觉得安装的不够好,比如文件位置什么的,你可以重新安装。

如果你的gerrit服务已经处于运行中,需要先执行下面的命令把它停掉

$ /home/gerrit/gerrit_site/bin/gerrit.sh stop

然后直接删除 /home/gerrit/gerrit_site/ 整个文件夹就好了。

如果你的gerrit服务没有正常退出,可能会发现这个文件夹删除不掉(cache 和 db这两个文件夹一直都会存在),其实是因为还有gerrit的进程在跑,我们要做的是找出gerrit的进程,然后kill掉就好了

$ ps -ef | grep gerrit

看上图中的最后一条,就是当前gerrit的进程,49513就是其进程id

我们接着执行

$ kill -9 49513

就强制关闭了gerrit进程,然后再试着删除整个 gerrit_site 文件夹就好了。

退出gerrit网页

如果你已经成功登录了gerrit的网页,那么如果你想退出,请直接关闭整个浏览器,gerrit没有做logout的session清除,所以如果你直接点击网页右上角的logout,要么会出错,要么就会进入到之前那个提示需要反向代理的错误页面。关于登出,gerrit给出的原因是:

You are using HTTP Basic authentication. There is no way to tell abrowser to quit sending basic authentication credentials, to logout with basicauthentication is to close the Webbrowser.

四、LINUX环境搭建GERRIT服务器与升级GERRIT服务器

1.Gerrit是什么

       Gerrit是Google开发的开放源代码的代码审核工具,可以方便得进行代码审核工作。代码审核方便事前和事后加强监督和管理,从而提高工程质量,保证产品的高质量开发。

       Gerrit本身就包含Git,网上有各种Gerrit和GitLab混搭的方法,我看完全是没有必要的,只要搭建Gerrit即可。

       Gerrit+Jenkins是一般公司的搭配,但Jenkins配置比较复杂,而且其实每日进行日构建,也完全可以达到版本纠错。但Gerrit之类的代码审核工具,是很有必要存在的。

2.在Linux上搭建Gerrit服务器

      一般建议在Linux上搭建Gerrit服务器。

     1)下载Gerrit      

      首先,下载Gerrit源代码安装包。Gerrit的下载地址是:Gerrit Code Review - Releases

      2)安装JAVA

       Gerrit是用JAVA编写的,所以,确保你本地有JAVA运行环境。一般的Linux都安装了默认的JAVA运行环境,但如果没有,你应该安装。

      如果不懂JVM、JRE和JDK三者关系的,不明白为什么JAVA程序为什么要安装JAVA运行环境的,可以查更多资料了解,但如果想安装JAVA运行环境,可以有几种方法:

      1)普通方法,下载JAVA运行环境或者JDK,然后修改环境文件;

      现在的JAVA服务器,已经要求用IE下载JRE或者JDK了,如果可以用IE可直接下载。

      可以用/etc/profile 等方法修改环境变量。

      典型的配置文件修改如下:

  1. export JAVA_HOME=JAVA程序安装目录或者解压包目录

  2. export PATH=$JAVA_HOME/bin:$PATH

  3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

      2)CentOS用yum安装,Ubuntu用apt-get install 安装。

     㳟祝202205026 gerrit 公司9周年生日_第10张图片

  1. //ubuntu下安装JAVA的方法

  2. sudo apt-get update

  3. sudo apt-get install oracle-java8-installer

  4. //CentOS下安装JAVA的方法

  5. yum install java-1.8.0-openjdk*

     当在程序中打java --version出现版本信息的时候,就可以认为JAVA安装成功了。

     3)Gerrit安装

     下载好Gerrit包之后,执行安装命令。

      

java -jar Gerrit安装包 init -d Gerrit安装目录

     安装时,有相关配置选项,一般情况下,默认安装就可以;如果有个性化修改,可以个性化修改。

     一般情况下,如果是Gerrit服务器,部分安装参考会要求用gerrit用户,我个人感觉没有必要。当然,如果创新新的用户有如下好处:Linux是多用户和多环境的,创建一个全新的用户,方便不同用户访问不同的权限并具有不同的程序运行环境。

     4)Gerrit+Nginx配置

      Gerrit服务器运行的方法是:在Gerrit安装目录,执行 ./gerrit.sh start

     但如果用web直接登录Gerrit,会出现各种问题。一般会建议用Nginx作为反向代理,为Gerrit提供相应目录。

      (1)Nginx安装:

         Nginx下载地址:Index of /download/

        下载完成以后,直接解压安装即可。

        一般情况下,安装要求如下:

    㳟祝202205026 gerrit 公司9周年生日_第11张图片

  1. wget 远程下载链接

  2. ## 解压

  3. tar -zxvf Nginx安装包.gz

  4. ##进入nginx目录

  5. cd 解压后的安装包

  6. ## 配置,如不加--prefix= 就会安装到默认路径下

  7. ./configure --prefix=/usr/local/nginx

  8. # make

  9. make

  10. make install

    (2)Nginx + Gerrit配置

       首先,配置Gerrit,Gerrit的配置文件在  Gerrit安装路径/etc/gerrit.config,打开gerrit.config进行配置。

          㳟祝202205026 gerrit 公司9周年生日_第12张图片

  1. [gerrit]

  2. basePath = git

  3. canonicalWebUrl = http://网址:(端口号,我配置为80)/ #网址加端口号,最主要和Nginx对应

  4. serverId = #serverID

  5. [database]

  6. type = h2 #可修改,我是用默认的

  7. database = /home/ad/review_site/db/ReviewDB #DB路径

  8. [index]

  9. type = LUCENE

  10. [auth]

  11. type = http

  12. logoutUrl = http://192.168.1.99:80

  13. [receive]

  14. enableSignedPush = false

  15. [sendemail]

  16. smtpServer = localhost

  17. [container]

  18. user = ad

  19. javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre #JRE路径,我用的是默认路径

  20. [sshd]

  21. listenAddress = *:29418 #默认ssh端口,我采用默认的,可修改

  22. [httpd]

  23. listenUrl = http://*:Gerrit实际的端口号,可修改,不冲突即可/

  24. [cache]

  25. directory = cache

  26. [sendemail]

  27. #这部分可以不要

  28. enable = true

  29. smtpServer = smtp地址

  30. smtpServerPort = smtp端口号

  31. smtpUser = smtp用户

  32. from = gerrit库

  33. [gitweb]

  34. #随后添加

        Nginx配置,可以在gerrit配置文件中进行配置Nginx 服务。默认配置目录是/etc/nginx/,如果没有默认安装,可以用whereis nginx进行安装。

      在目录下,可以新建一个gerrit.conf,并进行配置。

 
  

  1. server {

  2. listen 监听端口,我默认的是80;

  3. listen [::]:监听端口,我默认的是80;

  4. server_name localhost;

  5. allow all;

  6. deny all;

  7. auth_basic "Welcomme to Gerrit Code Review Site!";

  8. auth_basic_user_file ~/review_site/etc/passwd(可根据自身实际进行修改);

  9. location / {

  10. proxy_pass http://localhost:(上面Gerrit的监听端口);

  11. proxy_set_header X-Forwarded-For $remote_addr;

  12. proxy_set_header Host $host;

  13. }

  14. }

     弄好以后,重启Gerrit和Nginx。

     重启Gerrit:Gerrit安装路径/bin/gerrit.sh  restart

     重启Nginx:/etc/init.d/nginx restart

5)安装gitweb

      安装命令行: 

      ubuntu: apt-get install gitweb
      redhat/centOS: yum install gitweb

      配置gitweb,配置文件为 /etc/gitweb.conf

      关键是修改$projectroot

      同时,修改原来gerrit.config 

 
  
  1. [gitweb]

  2. type = gitweb

  3. cgi = /usr/lib/cgi-bin/gitweb.cgi

3.Gerrit权限管理和审核代码

1)建立用户       

        Web管理很重要的一个工作就是权限管理和ACL管理,这样才能保证数据的安全和互联网上信息的安全。所以,在一个Web管理系统里,用户分类和权限管理是非常有必要的。

       在Gerrit里面,首先要简历用户名和密码,用户名和密码建立通过Linux,而且,gerrit.conf也建立了用户名和密码验证的路径。到密码验证路径下,执行 建立用户和密码的命令,会修改相应密码。

        

htpasswd -m passwd(即文件名) 用户名

       随后,用web登录gerrit服务器,用刚建立的用户名和密码,然后,可以修改相关信息。同时,可以把自身的公钥放到Gerrit库上。

       Gerrit配置公钥需要本地有公钥,公钥建立方法:

      (1)在Git Bash里执行 ssh-****** -t rsa -b 4096 -C [email protected]

      (2)把 “C:\Users\用户\.ssh”的id_rsa.pub打开,把里面的文件输入到Add Key里面。

       注意:如果用户的相关信息已存在,则可能会有500 Internal Error ,不创建相关信息即可。

  2)作为管理员,可以对用户分组,并对组别权限进行设置。

  一般情况下,用Gerrit会禁止用户直接合入。

   方法为,用web进入gerrit,选择“People” ——> "Create New Group",把默认的用户给加进去。

㳟祝202205026 gerrit 公司9周年生日_第13张图片

 可以设置用户禁止直接合入代码。

       选择相应的工程----->"Acess" ----->"Add Reference" ------> "Add Permission",选择“Push”,选择需要的Group,然后,权限改为BLOCK,即可禁止用户直接合入代码。

       备注:只有管理员才有较大权限,其他人可以分配一般开发的权限。读权限是必须放开的,具体参考禁止直接push权限。

4.升级Gerrit服务器

      较低版本的Gerrit会缺失相应的功能,故对Gerrit进行升级。

     升级步骤:

     1)备份原有程序(建议整体迁移到另一个文件);

     2)关闭原来的程序,下载新版本后,执行java -jar 新版本 init -d 原来的安装目录。依然会提示你相应修改,默认不变即可;

     3)执行原来的运行程序,如果出错,执行java -jar 新版本r reindex -d 原来的安装目录

后记:

        在敏捷式开发中,代码审核是很重要的一环,Gerrit是必不可少的一部分,也是团队整体提高开发能力的重要一环。笔者也感觉到:人和人的差距其实并不大,关键是理念和运用工具的能力。

你可能感兴趣的:(gerrit,git,centos)