以下内容亲测验证通过。
Git是目前最流行的分布式版本控制系统,而Gerrit是一种免费、开放源代码的代码审查软件,使用网页界面。利用浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。趁着做测试的机会,简单学习了解一下Git+Gerrit是如何搭建使用的,顺便简单做个小笔记。
1:安装git
sudo apt-get install git-core openssh-server openssh-client
2:安装Gerrit
首先建立gerrit用户:
sudo adduser gerrit
sudo passwd gerrit
su gerrit
gerrit是由java开发的,封装成了一个war包,所以需要java环境,首先在服务器端执行java --version查看一下有没有配置好java环境。这里我下载:jdk-7u45-linux-i586.tar.gz使用下面命令安装:
sudo tar zxvf ./jdk-7u45-linux-i586.tar.gz -C /opt
然后配置环境变量:
vim ~/.bashrc
添加如下内容:
JAVA_HOME=/opt/jdk1.7.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
下载gerrit。这里我直接在百度上搜索gerrit某个固定版本,gerrit的war包,通常包名为gerrit-xxx.war,xxx为版本号,这里我下载gerrit-2.11.war。
安装gerrit:
java -jar gerrit-2.11.war init -d review_site
基本上一路回车就可以了,注意其中身份验证时我选择了HTTP,此认证方式需要配置apache的反向代理,当然也有其他认证方式可选。这里选择http认证方式,并在apache中配置web站点的口令认证,通过口令认证后gerrit在创建账号的过程中会询问用户的邮件地址并发送邮件。gerrit数据库选择默认的H2即可。
Behind reverse proxy [y/N]? y
这里配置反向代理,选择y
配置gerrit:
vim review_site/etc/gerrit.config
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.1.252:8080/
[database]
type = h2
database = db/ReviewDB
[index]
type = LUCENE
[auth]
type = HTTP
[sendemail]
smtpServer = smtp.exmail.qq.com
smtpServerPort = 465
smtpEncryption = SSL
smtpUser = emailaddr@example.com
smtpPass = emailpasswd
from = emailaddr@example.com
[container]
user = gerrit
javaHome = /opt/jdk1.7.0_45/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8081/
[cache]
directory = cache
安装apache2服务器:
sudo apt-get install --reinstall apache2 apache2.2-common
配置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的监听端口:
vim /etc/apache2/port.conf
NameVirtualHost *:80
NameVirtualHost *:8080 //添加
Listen 80
Listen 8080 //添加
配置反向代理:
sudo vim /etc/apache2/httpd.conf
<VirtualHost *:8080>
ServerName 192.168.1.252
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
AllowEncodedSlashes On
RewriteEngine On
RewriteRule ^/(.*) http://192.168.1.252:8081/$1 [NE,P]
<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/etc/passwd
</Location>
ProxyPass / http://192.168.1.252:8081/
</VirtualHost>
在主机配置文件中加入httpd.conf,使其生效:
sudo vim /etc/apache2/apache2.conf
加入include httpd.conf 如果有就不用加了
设置第一个gerrit用户的账号和密码:
touch ./review_site/etc/passwd
htpasswd -b ./review_site/etc/passwd admin admin
(后续再添加gerrit用户可使用:$:htpasswd -b ./review_site/etc/passwd UserName PassWord)
启动gerrit服务:
./review_site/bin/gerrit.sh start
重启apache2服务:
sudo /etc/init.d/apache2 restart
到这里基本就配置的差不多了,在客户端访问http://192.168.1.252:8080/,用刚才创建的admin用户登录,系统自动将该用户注册为gerrit账户。(注:第一个登录的用户自动注册为管理员(gerrit账号ID为1000000的账号))
注意:用htpasswd命令创建HTTP认证时,并没有在gerrit数据库中创建账号信息,当登录成功后,gerrit会自动创建同名的gerrit用户。如果在htpasswd命令创建账号之前,gerrit数据库中已经存在同名的gerrit用户(如:直接通过操作数据库添加的),那么web登录时,不会讲htpasswd命令创建的账号和gerrit数据库中的同名用户关联起来,而是自动新创建一个gerrit用户与之关联(即一个新的gerrit用户ID),而且会要求你手动输入gerrit用户名。
gerrit网页端配置:
登录,浏览器输入192.168.1.252:8080回车验证身份:
账户信息配置,点击右上角Settings:
Contact Information配置全名和邮箱,全名会在右上角显示,邮箱用户后续操作中会有提示作用。
添加个人公钥:只有添加公钥之后,本地用户才能访问服务器的代码库。
到这里基本配置完成。接下来在本地安装repo。
3:安装repo
下载repo.git:
mkdir -p ~/gitCfg
cd ~/gifCfg
git clone http://gerrit.googlesource.com/git-repo git-repo.git
如果上面的地址无法连接,可以尝试下面的地址:
git clone http://review.mfunz.com/git-repo git-repo.git
配置repo:
将git-repo.git目录下的repo拷贝到/usr/bin/目录下:
cd git-repo.git
sudo cp repo /usr/bin/repo
这时所以的准备工作都完成了,这里在客户端可以测试ssh是否可以连接:执行ssh -p 29418 192.168.1.252,如果连接成功,就可以做接下来的工作了,成功连接提示如下:这里我重新创建了一个gerrit账号:
这个时候代表ssh连接成功,我们就可以操作gerrit服务器和代码服务器了。
首先repo只是一个python写的脚本程序,是对git命令的封装,git用来管理单个的git仓库,而repo是用来管理多个被git管理的git仓库的,repo的核心就是清单库文件,repo指令会通过制定的清单文件来下载多个或者单个git仓库。这里我们首先创建清单库,并建立默认的清单文件。
创建清单库:
ssh -p 29418 admin@192.168.1.252 gerrit create-project --empty-commit --name manifest
ssh -p 29418 admin@192.168.1.252 gerrit create-project --empty-commit --name test
这个时候就可以在gerrit web页面的project->Lists下面看到manifest和test仓库了。repo默认的清单文件是default.xml来官气其他仓库的,这里先clone清单库,并创建清单文件:
创建清单文件default.xml,内容如下:
然后将default.xml推送到manifest仓库:
git add default.xml
git commit -m “add default.xml” default.xml
git push orgin HEAD:refs/for/master //这句话是推送到gerrit,可以通过管理员审核,然后合并
最后其他用户可以直接通过repo init来任意下载所有被管理的仓库代码,这里我只创建了一个呗管理的test仓库,做演示:
repo init -u ssh://username@192.168.1.252:29418/manifest.git
//这里会在当前目录下生成.repo目录,里面会包含完整的repo和清单库
repo sync //这里会根据清单库的xml文件来同步下载xml里面的project标签定义的所以项目
这个时候就可以看到test仓库了,可以在其下面添加各种代码,然后推送到gerrit服务器,添加审核人员,审核通过之后,会自动合并到远程代码服务器。