赞
踩
Gerrit 是一个基于 web 的代码评审工具, 它基于 git 版本控制系统。Gerrit 旨在提供一个轻量级框架, 用于在代码入库之前对每个提交进行审阅。Gerrit记录每一次提交的代码修改 , 但实际上并不成为项目的一部分, 直到它们被审阅和接受。它是标准开源过程的一个简单工具来支持提交补丁程序, 然后由项目成员在应用到代码库之前进行评审。Gerrit 首先是一个临时区域, 在提交的代码成为代码库的一部分之前, 可以对其修改进行检查。因此,在项目开发过程中我们为了保证代码的质量,我们就可以通过Gerrit来review别人的代码了,等所有人review后代码才能提交到仓库。
下边我们说下怎么在linux环境下搭建gerrit,以及在搭建过程中遇见的坑。
大致步骤:
apt-get install git
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服务器是用来做反向代理用的。由于使用我们后面在安装Gerrit时选择的认证方式为http,需要用apache2来做一个反向代理。
1. 安装apache2
sudo apt-get install apache2
2.验证是否安装成功
sudo /etc/init.d/apache2 start
如果出现下面的提示,说明以已经安装启动成功。
[ ok ] Starting apache2 (via systemctl): apache2.service.
下载链接: 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 ******
来创建。
首先我们得简单了解下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了。
这个搞了我一大天的时间,究其原因,就是Gerrit的账户没有生成对,在访问前我们一定要先生成账户密码。
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
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 mng@192.168.0.188)
6. 设置server hostname(),同时更新hosts文件中的域名映射(127.0.1.1 )。特别说明,如果需要安装邮件服务,域名的设置一定不要跳过。
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
1. 安装postfix和mailutils(sudo apt-get install postfix mailutils)
按默认配置即可
2. 安装完成后,测试(echo “mail installed, send is OK?” | mail -s "test mail send" xxx@126.com
可以通过tail -f /var/log/mail* 查看发生日志
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 = xxx@qq.com
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"
重启查看是否自启动
1. 生成密匙/公匙(ssh-keygen -t rsa, 生成的密匙对在.ssh目录下)
2. 登录到gerrit网页,输入用户名和密码;登录后完成姓名,邮箱注册(发送确认邮件到注册有效,登录状态下,复制邮件中的链接到浏览器,完成确认);添加公匙到gerrit中(cat .ssh/id_rsa.pub,复制显示内容到网页)。
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 tly@192.168.0.188:hooks/commit-msg .git/hooks/
提交:git push origin HEAD:refs/for/master:
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做为代码审核的工具,最近3天彻底研究了下gerrit的安装配置过程,这里做个记录,期间很多细节都一一记录下来,以便之后有同学需要用到。
这篇博文先介绍下gerrit的安装过程,然后之后还准备写一篇文章,介绍如何利用gerrit和sourceTree进行协同工作,换句话说,就是gerrit的详细工作流程。
先记录下我的开发环境以及要正确安装gerrit需要用到的工具:
几点说明:
关于操作系统
Redhat和CentOS用的是同样的内核,我这里是6.5版本的内核;其他linux系统上安装过程照猫画虎应该也差不多,只不过可能比如Java或者Nginx等工具的安装方式有所差别。
为了方便后面文章的讲解,我们这里假设gerrit服务器的ip地址是 192.168.1.100
关于Java环境
在终端中输入 java -version
务必确保你的java环境正确安装了;因为整个gerrit的安装是依赖于Java的,另外最好确保Java版本在 1.6 以上吧,虽然我没有验证过低版本的Java是不是没问题,但是高一点的版本保险一点。
Web服务器
网上很多教程有讲到gerrit+apache安装过程的,我这里是用nginx。先来说说为什么一定要用apache或者nginx,是的就是为了 反向代理
。
Gerrit有两种工作方式,我们要采用 http
的工作方式,也就是代码审核人员,可以直接通过Web页面对提交的代码进行评审以及后续的操作。
然后Gerrit要求不能直接请求其端口,必须要使用反向代理才能正确登录。而我们知道Nginx的成功正在于其高效、轻量级以及 反向代理 ,虽然Apache也有反向代理的功能,但是如果你在安装Apache时没有开启,后续的开启过程要相对复杂一点,而Nginx就简单的多了。
不过即便我们使用Nginx做为web页面引擎,仍然需要安装Apache,因为我们需要用到apache的一个工具来创建验证密码文件。这个后面我们会看到具体用法。
数据库
我们使用gerrit自带的H2数据库。网上也有其他数据库的安装教程,我这里想说的是,H2就够用,而且,我们不推荐直接对数据库进行操作,所有的操作,都可以通过命令行的方式完成,所以,尽量简单我们就使用自带的默认的数据库好了。
所以,请务必确保以上几个工具正确安装。
在RedHat或者CentOS上可以通过 yum
工具来安装,如果yum的源打不开,可以去网上搜一下替换yum源的方法。
gerrit的下载地址:
Gerrit Code Review Releases | Gerrit Code Review
我使用的gerrit版本是 2.13.4 。 下载完成之后会发现是一个 war
的包,所以我们的Java环境一定要安装正确。
新建一个用户用来专门管理gerrit相关的内容。
在root用户(或者使用 sudo
命令)下面输入下面的命令:
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">$ adduser gerrit
- $ su gerrit
- </span></span></span></span>
建好用户以后,我们可以把之前下载好的gerrit安装包(gerrit-2.13.4.war)拷贝到 /home/gerrit/
目录下,一会方便gerrit用户来安装。
在gerrit用户的目录(/home/gerrit/)下面,执行下面的命令:
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">$ java -jar gerrit-2.13.4.war init -d ~/gerrit_site
- </span></span></span></span>
这个命令的意思是执行安装gerrit,会在当前目录下新建一个文件夹 gerrit_site
用来作为gerrit的根目录,在这个目录中,会安装git仓库,以及gerrit的web页面,还有gerrit的bin,etc等文件夹。
然后就开始安装过程了,安装的过程会询问很多问题,有一些判断性的问题会用 [y/N]
这样的形式,大写的字母表示默认,我们直接敲回车就表示采用默认的安装选项。
注意:
Authentication method
时输入 http
,其他全部回车用默认值,因为其他配置我们待会可以通过 etc/gerrit.config
文件进行修改/lib
文件夹下面查看他们是不是已经下载完了,或者你手动把那两个文件下载完之后,scp到 /lib
下面。ctrl+c
然后重新安装就可以了。下面我就把整个安装过程全部贴出来,加上一些注释,好让大家看清楚都安装了什么:
<span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">*** Gerrit Code Review <span style="color:#880000">2.13</span>.<span style="color:#880000">4</span> *** <span style="color:#888888">## git 代码仓库的位置, 默认会在之前敲的init -d 目录下新建一个git文件夹</span> <span style="color:#888888">## 我们回车表示默认地址</span> *** Git Repositories *** Location of Git repositories [git]: <span style="color:#888888">## 数据库类型,我们直接回车表示默认的h2</span> *** SQL Database *** Database server type [h2]: <span style="color:#888888">## 用户认证方式,注意!!!!!这里一定要手动输入 http, 其他的就直接回车</span> *** User Authentication *** Authentication method [OPENID/?]: http Get username from custom HTTP header [<span style="color:#bc6060">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</span><span style="color:#bc6060">/lib/jvm</span><span style="color:#bc6060">/java-7-openjdk-amd64/jre</span>]: Copy gerrit-<span style="color:#880000">2.13</span>.<span style="color:#880000">4</span>.war to /home/gerrit/review/bin/gerrit.war [Y/n]? Copying gerrit-<span style="color:#880000">2.13</span>.<span style="color:#880000">4</span>.war to /home/gerrit/review/bin/gerrit.war *** SSH Daemon *** Listen on address [*]: Listen on port [<span style="color:#880000">29418</span>]: <span style="color:#888888">## 这里下载可能会失败,按照我之前说过的方法重新试一遍应该就ok了 </span> Gerrit Code Review is <span style="color:#333333"><strong>not</strong></span> 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 <span style="color:#333333"><strong>and</strong></span> install it now [Y/n]? Downloading http:<span style="color:#bc6060">//www</span>.bouncycastle.org/download/bcpkix-jdk15on-<span style="color:#880000">151</span>.jar ... <span style="color:#888888">## http的反向代理,我们这里先不要设置,一路回车,尽快完成安装</span> *** HTTP Daemon *** Behind <span style="color:#333333"><strong>reverse</strong></span> proxy [<span style="color:#bc6060">y/N]? Proxy uses SSL (https://</span>) [<span style="color:#bc6060">y/N]? Subdirectory on proxy server [/]: Listen on address [*]: Listen on port [8080]: /</span><span style="color:#bc6060">/ 插件,默认都是不安装的 *** Plugins *** Installing plugins. Install plugin download-commands version v2.11 [y/</span>N]? Install plugin reviewnotes version v2.<span style="color:#880000">11</span> [<span style="color:#bc6060">y/N]? Install plugin singleusergroup version v2.11 [y/N]? Install plugin replication version v2.11 [y/</span>N]? Install plugin commit-message-<span style="color:#333333"><strong>length</strong></span>-validator version v2.<span style="color:#880000">11</span> [<span style="color:#bc6060">y/N]? Initializing plugins. No plugins found with init steps. Initialized /home/gerrit</span>_site ... </span></span></span></span>
其实安装过程真的很简单,只是在 Authentication method
方式时输入 http
其他的一路回车下去就好了。
安装完成之后,gerrit会自动启动,而且会开始监听两个端口:
我们可以通过下面命令查看:
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#bc6060">$ </span>netstat -ltpn | grep -i gerrit
-
- tcp <span style="color:#880000">0</span> <span style="color:#880000">0</span> <span style="color:#bc6060">:</span><span style="color:#bc6060">:</span><span style="color:#bc6060">:</span><span style="color:#880000">29418</span> <span style="color:#bc6060">:</span><span style="color:#bc6060">:</span><span style="color:#bc6060">:*</span> LISTEN <span style="color:#880000">49513</span>/GerritCodeRev
- tcp <span style="color:#880000">0</span> <span style="color:#880000">0</span> <span style="color:#bc6060">:</span><span style="color:#bc6060">:</span><span style="color:#bc6060">:</span><span style="color:#880000">8080</span> <span style="color:#bc6060">:</span><span style="color:#bc6060">:</span><span style="color:#bc6060">:*</span> LISTEN <span style="color:#880000">49513</span>/GerritCodeRev
- </span></span></span></span>
接下来就该Nginx上场了。
在没有配置nginx反向之前,我们直接访问 192.168.1.100:8080/login
(我们之前假设gerrit服务器的ip地址是192.168.1.100),会得到一个错误页面,这个页面对于初次使用http方式的gerrit用户可能会让你感到非常。。。绝望,笔者至少看到这个页面不下10多次。。。
就是这样图片:
下面我们就来看一下nginx需要怎样配置吧。
我们首先看一看nginx的默认配置。
注意,你的nginx应该是用root账户安装的,否则可能出现权限问题。我们需要从之前的gerrit用户退出来。
在root用户下面,输入下面的命令:
$ cd /etc/nginx/conf.d $ ls -l
默认的nginx只有一个default.conf文件,是nginx的默认配置文件,我们这里需要新建一个专门用来处理gerrit请求的配置文件,先来看一下我的目录吧:
我这里新建了一个 gerrit.conf
文件,用来处理gerrit的反向代理。待会我们来看里面需要配置些什么,我们先来研究下nginx默认的配置文件, default.conf
吧。
上面就是默认的配置,看到这里我把端口默认的监听端口设置成了82, 因为80分配给了apache;
然后日志文件的路径在 /var/log/nginx/
目录下,如果后面登录认证的失败的时候,我们可以在这个目录下面查找日志文件,分析失败的原因。
nginx路径在 /usr/share/nginx/
路径下,如果我们进到该目录下,查看其下面的index.html文件,就会发现他就是我们在 192.168.1.100:82
页面中看到的关于nginx的介绍的页面。
之后还有一些注释掉的关于php的配置部分,这里不做多余的介绍。
重点来看下我们的 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; } }
最终是这样的:
我们来详细解释几个重点:
81
端口,原因和前面一样,80端口被apache占用了,当然你还可以设置成其他没有被占用的端口auth_basic 是用于登录时弹出验证登录对话框,如图:
图片中 服务器提示: 后面的文字,就是我们在配置中当前选项的内容
auth_basic_user_file 是我们输入用户名和密码之后要去验证是否匹配的文件,看到路径是放在我们的gerrit用户目录下面;这个详细的内容我们一会再来说。
192.168.1.100:81
时,要指向的内容,这里面的proxy_pass 字段表示要做的反向代理,指向的是8080,还记得8080端口是谁在用么?对的,就是我们之前新建好的gerrit的web监听端口,也就是说,当用户访问81端口时,nginx直接把这个请求代理到8080端口上去了,这个就是所谓的 反向代理
。配置好了之后,我们需要重启nginx
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">$ service nginx restart
- </span></span></span></span>
然后我们去访问 http://192.168.1.100:81
页面,就能看到和上图一样的登录认证界面了。
那登录认证有了,我们怎么登录呢??就需要前面的 auth_basic_user_file
文件了。
这里我们需要用apach的 htpasswd
工具来新建这个文件,这也是为什么我们虽然不用到apache的反向代理,仍然需要apache的原因。
我们通过下面的命令来在 /home/gerrit/
路径下创建认证文件
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">$ htpasswd -c /home/gerrit/gerrit.password admin
- </span></span></span></span>
这个命令的详细解释:
/home/gerrit
目录下新建一个 gerrit.password
文件接下来你需要在命令行中连续输入两次密码,我们就为admin用户设置好了密码,可以通过vim来查看下这个密码文件,会发现里面是经过加密的。
如果我们想新建别的用户,或者修改某个用户的密码,只需要把 -c
改成 -m
就好了,如果还是用 -c
并且路径不变的话,就会覆盖掉原来的文件。
例如:我们想要新增一个用户,master,允许其通过页面登录,只需要执行下面的命令就好了
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">$ htpasswd -m /home/gerrit/gerrit.password master
- </span></span></span></span>
同样的输入两遍密码,就设置好了master用户的登录密码了。
注意 :
如果你是在root用户下输入上面的命令 创建了 gerrit.password
文件到 /home/gerrit/
目录中,你会发现在登录的时候永远登录不成功,永远会得到服务器500的错误页面。原因是 /homt/gerrit/
文件夹的权限问题。
我们知道, /home/gerrit/
是我们之前新建的gerrit用户的,那么这个文件夹的权限是700,也就是只允许gerrit用户访问,其他组的用户是访问不了的,虽然这个文件的权限拥有root用户的所有权限,但是因为它放在700权限的文件夹下面,所以同样其他用户是访问不到的。
这个问题之前纠缠了我好久,通过nginx的日志可以清楚的看到访问拒绝的错误。
所以,我们需要通过下面的命令,来改变gerrit目录的权限
- <span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">$ chmod <span style="color:#880000">755</span> /home/gerrit
- </span></span></span></span>
这样,当前目录权限就变成了 drwxr-xr-x
,也就是其他组的用户也拥有了读取和执行的权利。
好了,配置好了nginx,我们接下来修改下gerrit的配置,我们要做下面几个事情:
先来看一下我最终成品图,红框里面的东西是需要我们特别注意的:
http://192.168.1.100:8080
sendemail选项就是我们的邮件发送设置,如果你的gerrit服务器上没有搭建邮件服务器,那你可以用smtp发件代理,我这里去我们公司的邮箱注册了一个gerrit专用邮箱 gerrit@microwu.com
,我们公司使用的是阿里云的服务,所以smtp服务器地址是 smtp.mxhichina.com
,端口使用 465
,因为使用的是 SSL
认证,然后 smtpPass
填写上之前专用邮箱的密码。
sendemail有什么作用呢?
位于Administrator组中的用户,设置了想要watch的项目之后,所有和该项目相关的事件,都能收到一封邮件提醒,发送来自于这个专有邮箱
具体的细节我们在下一篇文章中再详细介绍
29418
这个端口proxy-http://*:8080/
,默认值是没有proxy的完成上面的配置之后,我们重启一下gerrit
gerrit的可执行文件位于 /home/gerrit/gerrit_site/bin
目录下,我们直接执行
$ /home/gerrit/gerrit_site/bin/gerrit.sh restart
这样,gerrit就会重新启动,并且加载我们刚才修改的配置。
重启完成之后,我们可以在浏览器中输入 192.168.1.100:81
看看是不是可以弹出输入用户名和密码的对话框(如果没有,请检查你的Nginx配置);然后输入正确的用户名(我们创建的密码文件用户是admin)和密码,如果你能登录到这个页面,就表示你的gerrit已经成功配置好了!
需要注意的是,gerrit配置了之后,第一个登录成功的用户,自动成为管理员,gerrit会给他分配一个id, 1000000
,之后登录的成员会依次自增1,初始时 Full Name 和 Email Address字段都是空的。
关于Gerrit的安装和配置Nginx实现反向代理的内容都介绍完了,关于如何使用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没有做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.
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 等方法修改环境变量。
典型的配置文件修改如下:
export JAVA_HOME=JAVA程序安装目录或者解压包目录
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
2)CentOS用yum安装,Ubuntu用apt-get install 安装。
//ubuntu下安装JAVA的方法
sudo apt-get update
sudo apt-get install oracle-java8-installer
//CentOS下安装JAVA的方法
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/
下载完成以后,直接解压安装即可。
一般情况下,安装要求如下:
wget 远程下载链接
## 解压
tar -zxvf Nginx安装包.gz
##进入nginx目录
cd 解压后的安装包
## 配置,如不加--prefix= 就会安装到默认路径下
./configure --prefix=/usr/local/nginx
# make
make
make install
(2)Nginx + Gerrit配置
首先,配置Gerrit,Gerrit的配置文件在 Gerrit安装路径/etc/gerrit.config,打开gerrit.config进行配置。
[gerrit]
basePath = git
canonicalWebUrl = http://网址:(端口号,我配置为80)/ #网址加端口号,最主要和Nginx对应
serverId = #serverID
[database]
type = h2 #可修改,我是用默认的
database = /home/ad/review_site/db/ReviewDB #DB路径
[index]
type = LUCENE
[auth]
type = http
logoutUrl = http://192.168.1.99:80
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[container]
user = ad
javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre #JRE路径,我用的是默认路径
[sshd]
listenAddress = *:29418 #默认ssh端口,我采用默认的,可修改
[httpd]
listenUrl = http://*:Gerrit实际的端口号,可修改,不冲突即可/
[cache]
directory = cache
[sendemail]
#这部分可以不要
enable = true
smtpServer = smtp地址
smtpServerPort = smtp端口号
smtpUser = smtp用户
from = gerrit库
[gitweb]
#随后添加
Nginx配置,可以在gerrit配置文件中进行配置Nginx 服务。默认配置目录是/etc/nginx/,如果没有默认安装,可以用whereis nginx进行安装。
在目录下,可以新建一个gerrit.conf,并进行配置。
server {
listen 监听端口,我默认的是80;
listen [::]:监听端口,我默认的是80;
server_name localhost;
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file ~/review_site/etc/passwd(可根据自身实际进行修改);
location / {
proxy_pass http://localhost:(上面Gerrit的监听端口);
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
弄好以后,重启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
[gitweb]
type = gitweb
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 your_email@example.com
(2)把 “C:\Users\用户\.ssh”的id_rsa.pub打开,把里面的文件输入到Add Key里面。
注意:如果用户的相关信息已存在,则可能会有500 Internal Error ,不创建相关信息即可。
2)作为管理员,可以对用户分组,并对组别权限进行设置。
一般情况下,用Gerrit会禁止用户直接合入。
方法为,用web进入gerrit,选择“People” ——> "Create New Group",把默认的用户给加进去。
可以设置用户禁止直接合入代码。
选择相应的工程----->"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是必不可少的一部分,也是团队整体提高开发能力的重要一环。笔者也感觉到:人和人的差距其实并不大,关键是理念和运用工具的能力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。