CentOS搭建gerrit服务

多次采坑下来的总结,希望可以帮到需要的人

1、更新yum源

  1. 配置本地ip,注意:dns可能没有写入/etc/resolv.conf 这个文件,如果没有写入,需要添加dns
    eg:添加内容 nameserver 114.114.114.114
  2. 确保已安装wget yum list wget 如果未安装: yum -y install wget
  3. 备份:/etc/yum.repos.d/CentOS-Base.repo
  4. 下载aliyun的源
    CentOS7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  5. 运行yum makecache生成缓存
  6. 运行 yum -y update 更新源
  7. vim /etc/selinux/config 设置 SELINUX=disable
  8. 关闭防火墙 systemctl stop firewalld
  9. 添加用户: adduser gerrit;

2、 java环境

查看jdk版本
yum search java|grep jdk
安装需要的jdk版本
yum install java-1.8.0-openjdk.x86_64
配置环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CLASSPATH
测试java环境
java -version

3、安装git

yum install git
验证git
git --version

4、安装Apache

启动:service httpd start
systemctl start httpd
设置httpd开机启动
chkconfig --level 345 httpd on
在这里插入代码片

5、安装gerrit

1、下载gerrit

wget  https://www.gerritcodereview.com/download/gerrit-2.12.4.war

2、切换到存放gerrit.war的目录下,执行
java -jar gerrit.war init -d review_site
3、配置gerrit

[root@localhost ~]# cd /usr/local/gerrit/
[root@localhost gerrit]# java -jar gerrit.war init -d review_site

*** Gerrit Code Review 2.10
*** 

Create '/usr/local/gerrit/review_site' [Y/n]? y

*** Git Repositories
*** 

Location of Git repositories   [git]:  //git放的目录,没有的话自己会创建的

*** SQL Database
*** 

Database server type           [h2]:   //我用的默认H2数据库,也可以输入mysql然后回车,这样你用的就是mysql数据库了

*** Index
*** 

Type                           [LUCENE/?]: 

*** User Authentication
*** 

Authentication method          [OPENID/?]: HTTP  //输入HTTP,不然就不是反向代理了
Get username from custom HTTP header [y/N]? n
SSO logout URL                 : 

*** Review Labels
*** 

Install Verified label         [y/N]? 

*** Email Delivery
*** 

SMTP server hostname           [localhost]: smtp.163.com   //输入自动发送邮件的邮箱smtp
SMTP server port               [(default)]: 25  // 465/994是SSL协议端口号,25是非SSL协议端口号(这里指的163邮箱)
SMTP encryption                [NONE/?]:   //如果上一步输入的是465/994,此处输入SSL,否则直接回车
SMTP username                  [root]: gaochujia@163.com     //此处是你自动发送邮件的邮箱
gaochujia@163.com's password   :    
              confirm password :     //此处是你邮箱的授权码,非邮箱密码(切记,不然邮件发不出去)

*** Container Process
*** 

Run as                         [root]:   //这是用户,可以用默认root
Java runtime                   [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre]: 
Copy gerrit.war to /usr/local/gerrit/review_site/bin/gerrit.war [Y/n]? Y
Copying gerrit.war to /usr/local/gerrit/review_site/bin/gerrit.war

*** SSH Daemon
*** 

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

Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v149
  If available, Gerrit can take advantage of features
  in the library, but will also function without it.
Download and install it now [Y/n]? y
Downloading http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar ... !! FAIL !!


error: http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar: 302 Found
Please download:

  http://www.bouncycastle.org/download/bcpkix-jdk15on-149.jar

and save as:

  /usr/local/gerrit/review_site/lib/bcpkix-jdk15on-149.jar

Press enter to continue 
Continue without this library  [Y/n]? 
Generating SSH host key ... rsa(simple)... done

*** HTTP Daemon
*** 

Behind reverse proxy           [y/N]? y
Proxy uses SSL (https://)      [y/N]? n
Subdirectory on proxy server   [/]: 
Listen on address              [*]: 
Listen on port                 [8081]: 8091   //这个端口号一定不要和apache的端口号一样
Canonical URL                  [http://localhost/]: 

*** Plugins
*** 

Install plugin commit-message-length-validator version v2.10 [y/N]? y
Install plugin download-commands version v2.10 [y/N]? y
Install plugin replication version v2.10 [y/N]? y
Install plugin reviewnotes version v2.10 [y/N]? y
Install plugin singleusergroup version v2.10 [y/N]? y

Initialized /usr/local/gerrit/review_site
Executing /usr/local/gerrit/review_site/bin/gerrit.sh start
Starting Gerrit Code Review: FAILED
error: cannot start Gerrit: exit status 1
Waiting for server on localhost:80 ... OK
Opening http://localhost/#/admin/projects/ ...OK
[root@localhost gerrit]#

4、gerrit的开启与关闭

./gerrit_site/bin/gerrit.sh start|restart|stop

6、安装gitweb组件

原理:gitweb就是支持网页查看git版本库中代码的工具,可以很直观的看见代码的提交记录(只有gerrit管理员才有权限

1、安装组件gitweb
yum -y install gitweb
2、修改httpd配置文件
vim  /etc/httpd/conf/httpd.conf
在配置文件末尾添加
##gitweb
<Directory "/var/www/git">          
    AddHandler cgi-script  .cgi
    DirectoryIndex   index.cgi   gitweb.cgi
    Order allow,deny
    Allow from all
</Directory>
3、重启httpd
systemctl restart httpd
4、修改gitweb配置文件
vim  /etc/gitweb.conf
在配置文件末尾添加
$projectroot = "/home/gerrit/review_site/git"   ###gerrit中git库文件位置
5、修改gerrit配置文件
vim /home/gerrit/review_site/etc/gerrit.config
在文件末尾添加
[gitweb]
        cgi = /var/www/git/gitweb.cgi
        type = gitweb
6、重启gerrit
/home/gerrit/review_site/bin/gerrit.sh restart
到此gitweb安装完毕。

7、给gerrit添加用户

注:用htpasswd创建的用户时,并没有往gerrit中添加账号,只有当该用户通过web登陆gerrit服务器时,该账号才会被添加进gerrit数据库中。 首次访问gerrit的用户将成为gerrit的管理员,以后注册的用户默认没有管理员权限,权限的修改可以由管理员完成。

创建passwd文件,添加gerrit登录用户(-c参数为创建,仅限第一次添加用户时使用) 
htpasswd -cb /etc/httpd/passwords admin admin 
passwords是在httpd目录下创建的文件,第一个admin是用户名,第二个admin是密码。
第二次添加其他用户时,不要加-c: 
htpasswd -b /etc/httpd/passwords test 123456

# 也可以这样添加
#  -c是新创建一个文件并添加用户, -m是添加一个用户
[root@bogon Desktop]# htpasswd -m /gerrit.password admin

8、修改Apache的config文件httpd.conf

vim /etc/httpd/conf/httpd.conf
Listen 80
Listen 8090  //额外加的端口号,两个都能访问
<VirtualHost *:8090>  //此处是Apache的端口号
    ServerName 10.121.119.50  //此处是你的ip地址
    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location /login/>
        AuthType Basic
        AuthName "Gerrit Code Review"
        Require valid-user
        AuthUserFile /etc/httpd/passwords   //刚刚创建的密码文件
    </Location>


    AllowEncodedSlashes On
    ProxyPass / http://10.121.119.50:8081/   //此处的8081是gerrit端口号
</VirtualHost>

Apache的开启与关闭

systemctl start|stop|status httpd

9、测试

打开浏览器,输入你的IP地址加上你的Apache端口号,需要你使用刚刚设置的gerrit用户进行登录就ok了

10、设置开机启动

gerrit开机启动
方式1:
sudo cp etc/gerrit.config /etc/init.d/gerrit
sudo ln -snf /etc/init.d/gerrit /etc/rc2.d/S90gerrit
sudo ln -snf /etc/init.d/gerrit /etc/rc3.d/S90gerrit
方式2:
[gerrit@localhost root]$sudo ln -s /home/gerrit/review2/bin/gerrit.sh /etc/init.d/gerrit.sh
[gerrit@localhost root]$sudo chkconfig --level 345 gerrit.sh on

httpd开机启动
[root@localhost ~]#chkconfig --level 345 httpd on

11、给用户添加邮箱

右上角 用户名 --> settings --> contact information --> register new email
点击register之后,该邮箱会收到一个激活邮件,复制指定的链接在新的窗口打开,邮箱成功激活。

12、将普通用户设置为管理员

People --> List Groups --> Administrators --> Members --> 输入用户名 --> Add
这样,该用户就成为管理员用户组中的一员了,具备了管理员权限。

13、添加客户端公钥

创建一个用户user1
切换到该用户 su user1
执行 ssh-keygen 生成公钥 ~/.ssh/id_rsa.pub
将id_rsa.pub中的内容全部复制,然后在网页中点击右上角的全名
点击“Settings–>SSH Public Keys”
点击“How to Generate an SSH Key”可以查看如何生成Public Key
将复制的公钥粘贴上去,点击add,公钥添加完成,一个用户可以添加多个公钥。
验证sshkey是否配置成功:ssh gerrit账号@ip -p 29418
如果验证未成功,检查 ~/.ssh/known_hosts 是否已存在,如果已存在,将其删除

14、创建代码库

Projects --> Create New Project --> 填入代码库名称,并选中“Create initial empty commit” --> 点击“Create Project” --> 在“Description”中填入描述信息,点击"Save Changes"。点击"Projects–>List" --> 代码库创建成功 --> 创建这个代码库的用户会默认关注这个库的变化。关注的意思是有代码提交等行为时关注这个库的用户会收到邮件通知。其它用户可以设置关注此库: 右上角 用户 --> settings --> Watched Projects --> Browse --> 选择需要关注的代码库,双击,完成关注。

15、给代码库配置权限

点击“Projects–>LIst–>代码库名称–>Access”

默认new-repo是继承All-Projects的权限。点击All-Projects可以编辑全局权限,通常全局权限编辑完成后新项目不需要再设置权限(除非有特殊需求)。为说明权限设置方法,先单独为new-repo设置本地权限,本地权限的优先级高于全局权限。通常设置评审代码权限和提交权限即可,其中前者是使项目提交的代码能够被评审,后者是允许评审者在评审通过后合入所提交的代码。

点击“Edit” --> 点击“Add Reference” --> Reference是代码提交的目的地(分支或Tag),Gerrit的权限管理是基于reference进行。默认reference是“refs/heads/”,这个通常不需要修改。"refs/"是控制所有提交的reference。点击“Add Permission”

添加代码评审权限需要选中“Label Code-Review”

添加组名,使得组内的成员拥有该权限

点击“Add”,再点击“Add Reference”添加提交权限:

选中"Submit"

点击“Save Changes”使设置生效

16、克隆代码库,上传项目源码

克隆:
点击“Projects–>LIst–>代码库后面的gitweb -->找到ssh链接并复制–> git clone ssh://admin@ip:29418/demo.git

该过程用来在commit-msg中加入change-id,gerrit流程必备。
在提交代码之前,需要进入到代码库主目录下执行:
gitdir=$(git rev-parse --git-dir); scp -p -P 29418 admin@ip:hooks/commit-msg ${gitdir}/hooks/
git commit --amend
修改代码并提交,采用 git push origin HEAD:refs/for/master 。

17、注意事项

  • 需要为每个使用者分配gerrit账号,不要都使用admin账号,因为admin账号可直接push master
  • pull代码后需要配置githooks文件,以便在commit时自动生成change-id,否则无法push
  • push代码时需要使用git push origin HEAD:refs/for/master(branch),gerrit默认关闭非admin账号的push direct权限
  • push代码时需要commit email与gerrit account email一致,否则无法push成功,可选择关闭email notify,并开启forge user权限,或者通过修改gerrit数据库account email信息
  • gerrit数据库与gitlab同步,需要安装replication插件,并开启该功能

参考链接:
Gerrit code review 介绍与安装 https://www.cnblogs.com/chenpingzhao/p/9337117.html
Java SDK Download: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
Gerrit Code Review - Releases Download: https://gerrit-releases.storage.googleapis.com/index.html
Gerrit Code Review - Quick get started guide: https://git.eclipse.org/r/Documentation/install-quick.html
Gerrit代码审核流程 http://www.worldhello.net/gotgit/images/gerrit-workflow.png
Gerrit代码审核原理 http://www.worldhello.net/gotgit/05-git-server/055-gerrit.html
Gerrit代码审核权限管理 https://gerrit-review.googlesource.com/Documentation/access-control.html#category_forge_committer
Gerrit修改数据库email信息 http://www.cnblogs.com/kevingrace/p/5624122.html
Gerrit安装replication插件 <https://gerrit-review.googlesource.com/Documentation/cmd-plugin-install.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值