下面这张图是本文要安装的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 “[email protected]” 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的使用和流程控制内容了。
这里先建立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