搭建自己的git gitweb gerrit服务器

软硬件环境

物理机:Windows10 64位

VMware版本:VMware Workstation 12

Ubuntu版本:ubuntu-14.04-server-amd64.iso

 

安装Ubuntu

VMware下Ubuntu Server 14.04安装教程,参考:

https://www.jianshu.com/p/0f0ed7d8e06e

教程里已经教我们安装了ssh服务,与该教程不一样的点:

1. 我分配给虚拟机硬盘共100G

2. 创建的用户名是我这里是叫flinger

3. 分区的设置我选择了Manuel手动设置,参考:

https://blog.csdn.net/chang_ge/article/details/52653033

我的分区情况如下:

1GB for /boot partition ext4

4GB for swap partition swap

75GB for / partition ext4

The rest for /home partition ext4

安装完成后,用flinger账号登录,顺便给root用户设置下密码:

sudo passwd

设置root用户的密码即可

 

 

 

设置固定IP

作为server一般是要用静态IP的,把DNS地址也配置下,方法如下:

sudo vi /etc/network/interfaces

       auto eth0

       iface eth0 inet static

       address 192.168.1.110

       netmask 255.255.240.0

       gateway 192.168.2.1

       dns-nameservers  8.8.8.8  114.114.114.114  223.5.5.5

       dns-search foo.org bar.com

 

保存退出,重启网卡(需根据你的实际情况配置)

sudo ifdown eth0

sudo ifup eth0

或者重启系统

sudo reboot

可以看到我这里IP固定设置为192.168.1.110

 

安装版本控制系统——git

安装git

sudo apt-get install git

git的基本操作,请参考:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

添加一个用户名为gerrit的用户,专门用来管理git仓库

sudo adduser gerrit

 

并将gerrit加入sudo权限,仿照root添加一行,用wq!保存退出

sudo vi /etc/sudoers

       gerrit  ALL=(ALL:ALL) ALL

 

在flinger家目录生成ssh公钥和私钥,一路敲回车默认即可

cd ~flinger

ssh-keygen -t rsa -C "xxxxxx@yyyyyyglobal.com"

注意,这个邮箱是要能用的邮箱,如qq邮箱、163邮箱等

 

把flinger用户的ssh公钥复制到git用户的authorized_keys文件

sudo cat /home/flinger/.ssh/id_rsa.pub | ssh gerrit@ubuntu "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

 

初始化一个git仓库(仓库名一般都是.git结尾)

cd /srv

sudo mkdir -p repositories/sample.git

sudo git init --bare repositories/sample.git

 

把owner改为gerrit,gerrit要对该目录有读写权限才行

sudo chown -R gerrit:gerrit repositories

 

现在可以通过git clone命令克隆远程仓库

cd ~flinger

git clone gerrit@ubuntu:/srv/repositories/sample.git

 

git配置一下(个人喜好,--global表示对当前用户有效)

git config --global alias.st status

git config --global alias.br branch

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

git config --global core.editor vim

git config --global user.email "xxxxxx@yyyyyyglobal.com"

git config --global user.name "flinger"

注意,这里配置的邮箱要跟刚才生成rsa公钥私钥的那个邮箱一致

 

cd sample

touch hello.txt

vi hello.txt

随便编辑一下hello.txt的内容,保存退出

git add hello.txt

git commit

会启动vi编辑器,写一句注释:add a hello.txt file,保存退出

 

可以看一下git log

git lg

 

由于远程库是空的,所以首次push需要加上-u参数,之后就不用-u参数了

git push -u origin master

 

这时你可以创建别的用户,也同样来clone一下这个sample仓库,模拟多人协作

我创建了一个toby用户,git clone拉下来这个sample project后,更新了两笔commit,push到服务端

(注意:同样要把toby的ssh公钥添加到git用户的authorized_keys)

用toby用户也添加了一条修改并提交了

 

这时在finger用户这边用git pull来拉到最新就可以看到toby用户的提交了

 

这种方法适合团队很小的公司,把每个人的公钥收集起来放到服务器的/home/gerrit/.ssh/authorized_keys 文件里是可行的

 

 

 

 

 

安装最简单的网页版本管理系统——gitweb

参考:

https://blog.csdn.net/xl_name/article/details/79617652

 

安装gitweb和apache2

cd ~flinger

sudo apt-get install apache2 apache2-utils git-core gitweb

 

修改配置文件(因为gitweb在/etc/apache2/conf.d/下安装了配置文件,但这个目录是过时的)

sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf

cd /etc/apache2/conf-enabled/

sudo ln -s ../conf-available/gitweb.conf gitweb.conf

 

修改gitweb.conf 如下:

sudo vi ../conf-available/gitweb.conf

在FollowSymLinks前面加上了"+"解决语法问题

 

使能cgi:

ubuntu中gitweb cgi脚本应该默认放在/usr/lib/cgi-bin/中,刚好和apache2默认的cgi-bin目录一致

sudo a2enmod cgi

sudo service apache2 restart

 

修改/etc/gitweb.conf,添加上项目信息:

sudo vi /etc/gitweb.conf

    $projectroot = "/srv/repositories";

    $projects_list = $projectroot;

 

再重启下apache2

sudo service apache2 restart

 

这时候可以在其他机器的浏览器访问了:http://192.168.1.110/gitweb

 

可以看到之前finger和toby的提交记录

 

 

 

 

安装代码审核服务器——gerrit

参考:

https://blog.csdn.net/sfr2017/article/details/82049375

https://blog.csdn.net/kanyueliang410/article/details/79182043

https://www.cnblogs.com/tesky0125/p/5877536.html

http://www.cnblogs.com/kevingrace/p/5624122.html

 

切到gerrit用户并跳到家目录

sudo su gerrit

cd ~gerrit

 

安装java,由于gerrit是基于java开发的,因此我们需要安装java

sudo add-apt-repository ppa:openjdk-r/ppa

sudo apt-get update

sudo apt-get install openjdk-8-jdk

 

Java的安装目录是/usr/lib/jvm/java-1.8.0-openjdk-amd64

 

安装完Java后可以用java -version看一下当前版本是否正确

 

配置java环境变量,在profile最后添加这3行

sudo vi /etc/profile

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

 

重跑一下这个脚本

source /etc/profile

 

下载gerrit安装包

wget https://gerrit-releases.storage.googleapis.com/gerrit-2.13.6.war

 

当前目录下得到了这个文件

 

安装gerrit

java -jar gerrit-2.13.6.war init -d review_site

安装期间它会让你配置一些东西,注意:

1. review_site 会自动帮你创建的这个目录

2. gerrit->basePath修改成你自己的git仓库路径

3. Behind reverse proxy 要选 y

4. Install Verified label 要选 y

5. 邮箱设置要根据实际来填写,qq邮箱或163邮箱的密码不是用一般的登录密码,而是一个叫授权码的东西,需要在qq邮箱或163邮箱设置里面生成或设置

6. [sendmail]的密码会另保存到review_site/etc/secure.config文件里,一定要保证gerrit.config文件里的密码和secure.config里的密码一致!

7. gerrit->canonicalWebUrl修改成你的IP,端口号随便改成9999

8. httpd->listenUrl随意改成8888,为了不跟原来的8080端口冲突

 

Waiting for server on 192.168.1.110:9999 ...,按Ctrl+C关闭等待

 

qq邮箱可以找到相关信息

 

在gerrit里集成gitweb

查看gitweb相关配置文件安装路径

sudo dpkg -L gitweb

找到这行:/usr/lib/cgi-bin/gitweb.cgi

添加到gerrit.config中

cd ~gerrit

sudo vi ./review_site/etc/gerrit.config

       [gitweb]

       type = gitweb

       cgi = /usr/lib/cgi-bin/gitweb.cgi

 

修改邮箱配置,[sendemail]这一段要这样子设置,邮箱号和密码(授权码)是你的

vi ./review_site/etc/gerrit.config

[sendemail]

        enable = true

        smtpServer = smtp.qq.com

        smtpServerPort = 465

        smtpEncryption = SSL

        smtpUser = 123456789@qq.com

        smtpPass = abcdefghijklmnop

        sslVerify = false

        from = 123456789@qq.com

 

我的配置截一下图

 

添加gerrit管理员账户,设置帐号密码(这里配的账号是gerrit,密码是123456)

touch ./review_site/etc/passwd

htpasswd -b ./review_site/etc/passwd gerrit 123456

 

修改配置,在Listen 80的下面追加Listen 9999

sudo vi /etc/apache2/ports.conf

       Listen 80

       Listen 9999

 

用HTTP需要配置反向代理

sudo touch /etc/apache2/sites-available/gerrit.conf

sudo vi /etc/apache2/sites-available/gerrit.conf

<VirtualHost *:9999>

       ServerName 192.168.1.110

       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

       AuthBasicProvider file

       AuthUserFile /home/gerrit/review_site/etc/passwd

</Location>

       AllowEncodedSlashes On

       ProxyPass / http://192.168.1.110:8888/

</VirtualHost>

 

启用gerrit.conf文件配置,相当于在/etc/apache2/sites-enabled/创建了gerrit.conf的软连接,apache2.conf会去该目录下包含它

sudo a2ensite gerrit.conf

 

开启一些模块

sudo a2enmod proxy

sudo a2enmod rewrite

sudo a2enmod ssl

sudo a2enmod proxy_balancer

sudo a2enmod proxy_http

 

重启gerrit和apache2服务

./review_site/bin/gerrit.sh restart

sudo /etc/init.d/apache2 restart

 

重启apache2可能遇到错误AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message。

解决办法:

sudo vi /etc/apache2/apache2.conf,最后追加一句:ServerName localhost:9999

 

再重启一下apache2

sudo /etc/init.d/apache2 restart

 

说明:./review_site/bin/gerrit.sh stop; ./review_site/bin/gerrit.sh run   这个run相当于start,但同时可以看到log,排错用

 

这时候可以在其他机器的浏览器访问了:http://192.168.1.110:9999/

第一个登录gerrit网页的用户默认就是gerrit管理员账户,这里用的账号是gerrit,密码是123456

 

注册管理员邮箱,这里我用163邮箱账号作为gerrit管理员的邮箱,此处的邮箱跟上面配置的qq邮箱不是同一个!注册后,上面配置的qq邮箱账号会发一封验证邮件给到这个163邮箱账号,点击跳转后即可验证完毕!

退出登录时,可以点页面右上角账号gerrit有个“Sign Out”

由于gerrit账号只负责管理gerrit,一般无需上传代码或者审核代码,建议不用输入SSH Public Keys

 

为flinger和toby用户添加访问gerrit的权限

htpasswd -b ./review_site/etc/passwd flinger 123456

htpasswd -b ./review_site/etc/passwd toby 123456

添加完成,gerrit和apache2服务不需要重启

注意:用htpasswd创建的用户,并没有往gerrit中添加账号,只有当该用户通过web登陆gerrit服务器时,该账号才会被添加进gerrit数据库中

 

为普通用户注册邮箱和添加公钥

如果在同一台电脑上操作,刚才已经用gerrit账户登录了浏览器,这时需要登出,否则下次再访问http://192.168.1.110:9999/会直接以之前的用户默认登录

在客户端浏览器用flinger这个账号登录http://192.168.1.110:9999/,新用户首次登录会提示要注册邮箱

如果后期想再注册邮箱的话,可以在gerrit网页右上角账号上,Settings->Contact Information->Register New Email ...,填入邮箱账号,点击Register后,登录你刚才注册的邮箱,激活即可

 

点击验证链接之后,就可以看到Preferred Email有下拉菜单的选项了

 

添加/home/flinger/.ssh/id_rsa.pub到gerrit网页Settings->SSH Public Keys

 

登出flinger用户

同理,用toby账户登录http://192.168.1.110:9999/,也添加toby的邮箱账号和ssh公钥

 

测试SSH key是否提交成功,可以在客户端执行以下命令就可以知道

ssh -p 29418 flinger@192.168.1.110

ssh -p 29418 toby@192.168.1.110

 

所以这里,共用到了4和邮箱了

gerrit.config   用了一个qq账号,用于发送验证链接到各个用户

gerrit管理员  用了一个163账号

flinger用户   用了一个我的企业邮箱账号

toby用户     用了另一个qq账号

 

创建用户组

注意:只有管理员组的用户才能创建group和Project

在gerrit网页上,People->Create New Group,输入自定义的组名(我这里叫Developers)

然后点击Developers,添加成员,我这里添加了flinger和toby进来这个组

 

添加完的效果如下

 

创建项目

在gerrit网页上,Projects->Create New Projects,如果不想创建新项目,可以点击List看看目前都有哪些已存在的project

 

可以看到我们之前在《安装git》章节创建的sample项目,此处再以sample为例

 

点击该项目,可以看到有 anonymous http|http|ssh 三种clone的方式,我这里选择ssh

 

flinger用户就可以使用该命令去下载这个sample project

git clone ssh://flinger@192.168.1.110:29418/sample

flinger用户可以用git lg(需要git配置别名)可以看到有两条记录了,这些都是之前在《安装git》章节添加的

同理,toby用户也可以使用git clone ssh://toby@192.168.1.110:29418/sample去拉这个project下来

 

设置权限

只有gerrit管理员有权限为普通用户设置权限

在gerrit网页上,Projects->List->sample->Access,点击Edit即可为sample创建访问权限

点击Add Reference

Reference栏先默认不改,点击Add Permission

一路添加权限 (Rights Inherit From:权限默认继承自All-Projects)

最终效果如下图 (Exclusive打钩表示覆盖All-Projects的默认权限),最后点击Save Changes

 

默认情况下,只有gerrit的管理员才能查看gitweb,普通用户要想访问gitweb,需要添加/refs/meta/config这一栏

关于更多gerrit权限的问题,可以参考

http://www.cnblogs.com/kevingrace/p/5651447.html

https://blog.csdn.net/chenjh213/article/details/50571190

 

接下来用flinger账号添加一笔修改并push到服务器,命令如下

git push origin HEAD:refs/for/master

HEAD:refs/for/master表示将代码将本地的HEAD传到远端的master分支,固定格式就是这样

你会发现报错:missing Change-Id in commit message footer

 

该过程用来在commit-msg中自动加入change-id,gerrit流程必备!

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 flinger@192.168.1.110:hooks/commit-msg ${gitdir}/hooks/

git commit --amend

git push origin HEAD:refs/for/master

push成功

 

在gerrit网页上,gerrit管理员和普通用户flinger看到的页面如下

gerrit管理员用户这里,All->Open可以看到有一笔修改,点击进去

 

gerrit管理员用户有verify +1和code review +2的权限 (之前配置的)

 

flinger用户有Verify +1的权限 (之前配置的)

 

flinger用户可以选择Verify +1,然后gerrit管理员可以选择+2,最后flinger和gerrit都可以点Submit提交这笔修改到服务器

该过程的动作,flinger注册的邮箱,都会收到相关邮件的提醒,nice!

 

这时toby用户可以用git pull来拉取最新的修改到本地

当然,toby用户也可以提交自己的修改,然gerrit来code review +2,最后Submit提交

 

设置开机启动,添加下面两行:

sudo vi /etc/rc.local

       /home/gerrit/review_site/bin/gerrit.sh start

       sudo /etc/init.d/apache2 restart

       exit 0

 

评审过程通常有三个人参与:代码提交,代码验证(Verify),代码审查(code Review)

通常由自动测试工具jenkins完成代码验证(Verify),此处有人工来进行Verify,因为没安装Jenkins

 

git gitweb gerrit的搭建,此处就先告一段落!

 

引用别人的一小段话:

code review的目的是团队成员在一起共同学习,而不是相互“挑错”。将code review称为代码回顾好一些,如果大家放弃“挑错”来共同学习,那么代码回顾中学习什么呢?

代码回顾的学习重点是团队成员共同识别模式,这里的模式是指程序员编写代码的习惯,包括“好模式”和“反模式”。

像富有表达力的命名,单一职责的方法,良好的格式缩进等,都是“好模式”。

团队成员通过阅读最近编写的测试代码和生产代码来识别“好模式”和“反模式”。

既是团队成员之间相互学习的过程,也是团队整体达成整洁代码共识的过程。

 

 

 

以下操作,希望对你有帮助:

打开数据库

cd ~gerrit

./review_site/bin/gerrit.sh stop

cd ./review_site/bin/

java -jar gerrit.war gsql -d ../

 

使用sql命令增删改查,如查询账户信息:

gerrit> select * from ACCOUNT_EXTERNAL_IDS;

 

可以修改数据库插入邮箱,可以不用在gerrit网页上注册了!慎用!

gerrit> insert into ACCOUNT_EXTERNAL_IDS values('1000000', '13866668888@163.com', 'NULL', 'mailto: 13866668888@163.com');

gerrit> insert into ACCOUNT_EXTERNAL_IDS values('1000001', 'xxxxxx@yyyyyyglobal.com', 'NULL', 'mailto:xxxxxx@yyyyyyglobal.com');

 

退出:

gerrit> \q

 

删除数据库:

gerrit> DROP ALL OBJECTS;

 

删除所有仓库和gerrit数据库、缓存

cd ~gerrit

rm -rf /srv/repositories/All-Projects.git/

rm -rf /srv/repositories/All-Users.git/

rm -rf ./review_site/db/*

rm -rf ./review_site/cache/*

 

重新安装一遍gerrit

java -jar gerrit-2.13.6.war init -d review_site

Install Verified label         [y/N]? y

IBehind reverse proxy           [y/N]? y

 

这时候去看 /srv/repositories 这目录已经又自动生成了两个git project了

All-Projects.git

All-Users.git

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cfl927096306

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值