结构图
下面这张图是本文要安装的Gerrit审批流程系统结构图。其中H2为Gerrit自带的H2数据库,当然我们也可以选择MySQL等其他主流数据库,但都没有H2方便简单。OpenDJ为一种LDAP创建和管理工具。Gerrit也支持其他多种登录认证方式,本文选择LDAP认证。
安装过程
1. 安装CentOS操作系统。(CentOS-6.3-x86_64-LiveCD.iso 700+MB) http://www.centos.org CentOS实际上可以说是免费的RedHat发行版,它包含了大部分RedHat的内容,没有包含一些商业版的特殊功能。对于搭建Gerrit环境来说已经足够,所以我们毫不犹豫的选择了CentOS。P.S.:除特别说明,以下安装都用root操作即可。
2. 安装JRE。( jre-6u25-linux-x64-rpm.bin) Gerrit是Java开源社区的优秀产品,因此要运行Gerrit,JRE是必须的。
#rpm -ivh jre-6u25-linux-x64-rpm.bin
3. 安装Git。http://www.git-scm.com 安装Git的时候遇到一个蛋疼的问题,官网主页居然被墙了。还好Linux命令行下面直接用以下命令安装。
#yum install git (CentOS/Fedora)
#apt-get install git (Debian/Ubuntu)
4. 安装OpenDJ。http://www.forgerock.org/opendj.html 选择RPM版,opendj-2.7.0-1.20130627.noarch.rpm。由于OpenDJ的RPM安装包有可能找不到JRE,所以我们加上了强制安装忽略依赖关系的参数(--nodeps –force)。
#rpm -ivh opendj-2.7.0-1.20130627.noarch.rpm --nodeps --force
5. 配置OpenDJ。
(1) 检查LDAP服务器状态。
#cd /opt/opendj/bin
#./status
如果服务器处于运行状态,请停止它。
#./stop-ds
(2) 执行OpenDJ配置程序。(此时会启动配置图形界面)
#cd /opt/opendj
#./setup
(3) 配置完成后,可以通过控制界面修改配置。
#cd /opt/opendj/bin
#./control-panel
6. 安装Gerrit。
(1) 下载Gerrit安装包(其实就是一个war包)。http://code.google.com/p/gerrit/
(2) 创建一个Gerrit用户。
#useradd gerrit
#passwd gerrit
(3) 切换到gerrit用户。执行
#su gerrit
#java -jar gerrit-2.5.4.war init -d /home/gerrit/review_site
(直接回车代表选择括号中的默认值)
Create ‘/home/gerrit/review_site’ [Y/n]?Y
Location of Git repositories [git]:git
Database server type [H2/?]:H2
Authentication method [OPENID/?]:ldap
LDAP server [ldap://localhost]: ldap://localhost //LDAP所在的服务器地址或者域名
LDAP username:
Account BaseDN: //根据LDAP配置填写
Group BaseDN: //根据LDAP配置填写
SMTP server hostname [localhost]: smtp.163.com //如果暂时没有可以不填写,安装完后可以在配置文件中修改
SMTP server port [(default)]: 25
SMTP encryption [NONE/?]: NONE
SMTP username : //邮箱帐号
Run as [gerrit]:
Java runtime [/usr/java/jdk1.7.0_25/jre]:
Copy gerrit.war to /home/gerrit/review_site/bin/gerrit.war [Y/n]?
SSH Listen on address [*]:
SSH Listen on port [29418]:
Gerrit Code review is not shipped with Bouncy Castle Cryto v144 … …
Download and install it now [Y/n]? Y
Behind reverse proxy [y/N]? N
Use SSL (https://) [y/N]? N
Listen on address [*]:
Listen on port [8080]:
Prompt to install core plugins [y/N]?
(4) 配置完成后的/home/gerrit/review_site/etc/gerrit.config应该是下面这样的。如果没有canonicalWebUrl,请自行添加。
[gerrit]
basePath = git
canonicalWebUrl = http://localhost:8080/
//canonicalWebUrl在LDAP验证成功后跳转时需要用到,因此必须配置成客户端(Web端)可以访问的域名或IP
[database]
type = H2
database = db/ReviewDB
[auth]
type = LDAP
[ldap]
server = ldap://ldap.amc.com
accountBase = DC=amc,DC=com
groupBase = DC=amc,DC=com
[sendemail]
smtpServer = smtp.163.com
smtpServerPort = 25
smtpUser = ******
[container]
user = gerrit
javaHome = /usr/java/jdk1.7.0_25/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
(5) 由于CentOS默认的防火墙没有打开8080和29418端口,因此,需要修改防火墙规则。
#iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
#iptables -I INPUT -p tcp --dport 29418 -j ACCEPT
#/etc/rc.d/init.d/iptables save
#iptables -L -n 查看规则是否添加成功
如果想要删除某条规则:
#iptables –L –n –-line-numbers
#iptables –D INPUT 1 根据需要删除某行(这里删除第一行)
(6) 开启和停止Gerrit服务器,用gerrit用户操作。
#cd /home/gerrit/review_site/bin
#./gerrit.sh start
#./gerrit.sh stop
如果出现错误:** ERROR: GERRIT_SITE not set。请修改gerrit.sh,增加下面这行:
###################
# Get the action and options
###################
GERRIT_SITE=/home/gerrit/review_site
7. Gerrit初始配置。
(1) 登录Gerrit网页。第一个login的用户将成为超级管理员。在此之前别忘记在OpenDJ中新建超级管理员账号。我们这里创建了Administrator的账号。
(2) 登录之后需要填写一些注册信息。Gerrit会将LDAP中的用户名和邮箱信息映射过来,因此无需再填写。
(3) 填写SSH Public Key。由于Administrator账号只负责管理Gerrit,一般无需上传代码或者审核代码,我们建议不输入SSH Public Key。但请注意,其他用户都需要输入SSH Public Key,否则无法正常上传和下载代码。
(4) 单击“Projects”,选择“Create New Project”,创建一个示例项目。例如:MyProject。P.S.:这时如果到/home/gerrit/review_site/git目录中,你将会看到一个名为MyProject.git的目录。这就是刚才创建的示例项目。
8. 远程Clone代码。
(1) 如果你使用的是windows系统,请安装msysgit。在Git Bash命令行环境中进行以下操作。
(2) 在本机(客户端)创建SSH证书。
# ssh-keygen -t rsa –C “user1@163.com”
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ user /.ssh/id_rsa.
Your public key has been saved in /home/ user /.ssh/id_rsa.pub.
(3) 在Gerrit服务器的LDAP中创建user1用户,并设置密码和邮箱。
/opt/opendj/bin/control-panel //启动控制面板图形界面
(4) 在本机以user1登录Gerrit网页。
(5) 填写SSH Public Key。即第一步中生成的id_rsa.pub中的全部内容。
(6) 测试SSH是否成功。
#ssh -p 29418 user1@Gerrit服务器的IP或者域名
如果出现下面的提示,表示连接成功:
**** Welcome to Gerrit Code Review ****
Hi user1, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use: git clone ssh://user1@localhost:29418/REPOSITORY_NAME.git
Connection to localhost closed.
(7) Clone远程代码。
# git clone ssh://user1@Gerrit服务器的IP或者域名:29418/MyProject.git
至此,安装完成,可以开始认真学习Gerrit的使用和流程控制内容了。
Gerrit初始设置
这里先建立4个账号用作流程演示,它们分别为:
GerritAdmin 管理员账号,即第一个登录进Gerrit系统的账号。
Reviewer1、Reviewer2审核人账号。
Submitter提交者账号。
服务器端设置:
1. 创建Reviewer组和Verifier组。
Reviewer:Reviewer1、Reviewer2
Verifier:GerritAdmin
2. 创建项目ExampleProject。
3. 配置项目参数。设置的其实是All-Projects的属性,这样以后创建的所有Project都具有这些属性。
服务器端设置:
1. 设置hooks脚本。Gerrit为了避免一个change被打回来修改后再被当作新的change提交,提供了相应的hook脚本。
# scp -P 29418 -p username@gerrit_server:/hooks/commit-msg .git/hooks
2. 创建Push别名。Gerrit不允许用户直接向ref/heades/master推送,任何提交都必须先提交到refs/for/master等待审核。因此需要使用git push origin HEAD:refs/for/master来提交。下面为这一命令设置一个别名。设置完之后,就可以用git push review推送更新了。
# vi .git/config
[remote "review"]
pushurl = ssh://username@gerrit_server:29418/ExampleProject.git
push = HEAD:refs/for/master