美文网首页Android开发Android技术知识Android开发经验谈
从0开始部署使用Gerrit(Ubuntu+nginx+Gerr

从0开始部署使用Gerrit(Ubuntu+nginx+Gerr

作者: 项勇 | 来源:发表于2019-07-30 20:02 被阅读11次

访问原文


gerrit30.png

简单介绍

gerrit1.png

1.之前git add --> git commit --> git push如图中橙色的线

2.gerrit就是上图中的那只鸟,普通成员的代码是被先push到gerrit服务器上,然后由代码审核人员,就是左上角的integrator在web页面进行代码的审核(review),当代码审核通过(approve)之后,这次代码才会被提交(submit)到代码仓库(repo)中去。

3.代码审核通过或被拒绝,代码提交者(Contributor)和所有的相关代码审核人员(Integrator)都会收到邮件提醒

4.gerrit还有自动测试的功能,和主线有冲突或者测试不通过的代码,是会被直接拒绝掉的,这个功能似乎就是右下角那个老头(Jenkins)的任务

5.当进行commit时,必须要生成一个Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒

6.提交者不能直接把代码推到远程的master主线(或者其他远程分支)上去。这样就相当于越过了gerrit了。 gerrit必须依赖于一个refs/for/*的分支。

假如我们远程只有一个master主线,那么只有当你的代码被提交到refs/for/master分支时,gerrit才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。

当审核通过之后,gerrit会自动将这条分支合并到master主线上,然后邮件通知相关成员,master分支有更新,需要的成员再去pull就好了。而且这条refs/for/master分支,是透明的,也就是说普通成员其实是不需要知道这条线的,如果你正确配置了sourceTree,你也应该是看不到这条线的

安装流程

开始安装

ubuntu系统

为求方便,我使用的是在VMware Workstation Pro虚拟机上安装,ubuntu直接去官网下载就行.
安装步骤直接琢磨一下,安装好后修改语言为中文,Ubuntu的终端支持中文显示,还有切换输入法

root

当系统准备好之后,首先要root,便于安装后续的支持包/程序/创建用户等

sudo passwd
# [sudo] tw 的密码:  sudo其实就是Ubuntu的一个root权限指令,输入你的密码回车就行
#新建好之后
su - #切换到root用户
# root@ubuntu:~# 就是切换成功

安装程序/包

之前因为是在虚拟机上安装Ubuntu,所以很多插件需要安装,后来直接安装Ubuntu系统后发现很多插件都自带了,所以以下插件视情况安装!

git(必要)

 apt-get update
 apt-get install git

vim

 apt install vim

JDK辅助(必要)

apt-cache search openjdk
 apt-get install openjdk-8-jdk
vim ~/.bashrc
java -versionjava

Nginx(必要)

 apt install nginx
 systemctl status nginx
service nginx restart

nginx需要新建一个配置文件/etc/nginx/conf.d/gerrit.conf

server {
     listen *:81;
     server_name gerrit.microwu.com;
     allow   all;
     deny    all;
     auth_basic "Welcomme to Gerrit Code Review Site!";
     auth_basic_user_file /home/gerrit/gerrit.password;
     location / {
        proxy_pass  http://127.0.0.1:8080;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
     }
   }

C环境

 apt-get install gcc-5
 apt-get install g++-5
 apt-get install build-essential

make

 apt-get install ubuntu-make

netstat

 apt-get install net-tools

Apache

 apt install apache2
 apt install apache2-utils

php

 apt-get install libxml2-dev
 apt-get install libbz2-dev

下载
自建目录解压

cd php-5.5.13
./configure --prefix=/usr/local/php --with-config-file-path=/etc --enable-inline-optimization 
--disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm 
--with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd 
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring 
--with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap 
--with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem 
--enable-sysvshm --enable-sockets --with-curl --with-zlib --enable-zip --with-bz2 
--with-readline --without-sqlite3 --without-pdo-sqlite --with-pear

gerrit安装(必要)

adduser gerrit
su gerrit

下载地址
安装包拷贝到/home/gerrit/

java -jar gerrit-2.13.4.war init -d ~/gerrit_site  #解压安装

安装过程只需要看到配置Authentication method时输入http
其他的一概回车;
在目录/home/gerrit/新建用户

$ htpasswd -c /home/gerrit/gerrit.password admin
$ htpasswd -m /home/gerrit/gerrit.password master

修改gerrit配置文件/home/gerrit/gerrit_site/etc/gerrit.config
我配置文件供参考对比

[gerrit]
    basePath = git
    serverId = bd3a7d07-58c8-42ac-8a0d-5d8d205ed3fb
    canonicalWebUrl = http://http://192.168.96.130:8080/
[database]
    type = h2
    database = /home/gerrit/gerrit_site/db/ReviewDB
[noteDb "changes"]
    disableReviewDb = true
    primaryStorage = note db
    read = true
    sequence = true
    write = true
[container]
    javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
    javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
    user = root
    javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[index]
    type = LUCENE
[auth]
    type = HTTP
[receive]
    enableSignedPush = false
[sendemail]
    smtpServer = smtp.ym.163.com
    smtpServerPort = 25
    smtpEncryption = SSL
    smtpUser = xiangy@topwayandroid.com
    smtpPass = xiangy1234
    from = xiangy@topwayandroid.com
[sshd]
    listenAddress = *:29418
[httpd]
    listenUrl = http://*:8080/
[cache]
    directory = cache

如果是按照我的步骤一步一步安装下,其实只需要修改sendemail内容,此处是配置邮箱的内容,因为我们部门用的的163邮箱,就根据163的stmp内容配置;
配置好之后重启gerrit和ngin;

 /home/gerrit/gerrit_site/bin/gerrit.sh restart    重启gerrit
service nginx restart  重启nginx

重启之后 查看端口信息,供参考

netstat -ltpn 
 PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26246/nginx: master 
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      26246/nginx: master 
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      107306/systemd-reso 
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      25265/cupsd         
tcp6       0      0 :::29418                :::*                    LISTEN      26454/GerritCodeRev 
tcp6       0      0 :::8080                 :::*                    LISTEN      26454/GerritCodeRev 
tcp6       0      0 :::80                   :::*                    LISTEN      26246/nginx: master 
tcp6       0      0 ::1:631                 :::*                    LISTEN      25265/cupsd 

确认gerrit和nginx有端口信息后,打开游览器输入你的ip:81,会先显示一个登录窗口

gerrit2.png

输入admin的账号和密码


gerrit3.png

显示这个界面就说明gerrit环境部署完成了,这个是2.16版本的gerrit。

注册登录账号

htpasswd -m /home/gerrit/gerrit.password master

gerrit的使用

我已经重新安装3.0版本
要正式看看gerrit要怎么使用了


gerrit6.png

SSH

管理员配置SSH

管理员电脑取出对应的公钥添加到gerrit

ssh-keygen -t rsa -C "admin@topwayandroid.com" 
#接下来输入钥匙名字为admin,与gerrit注册管理员的名字保存一直!

新建完成之后,拷贝admin.pub公钥添加到gerrit的web设置里


gerrit7.png

接着在/.ssh/config中添加如下配置

Host gerrit
HostName "192.169.96.131"  //这里是gerrit服务器的地址
User "admin"    //这里要和gerrit服务器上的账号名字一样
IndentityFile "~/.ssh/id_rsa"
port 29418  //默认端口号,不要改变

该配置是为了成员访问服务器gerrit

成员配置SSH

管理员先在gerrit服务器里帮成员注册一个账号,例如:xiangy
普通成员在其电脑上用同样的方法添加一个名字为xiangy的钥匙,然后将公钥发给管理员(实测可以自行添加SSH),管理员上用同样的方法添加成员SSH,


gerrit7.png

添加完成后将成员拖动到你的成员组


gerrit14.png
ssh gerrit gerrit set-account --add-email admin@microwu.com admi

管理员为成员添加邮箱后,就算注册完成。
成员记得在其电脑上添加git的账号名字跟邮箱,用于提交代码

git config --global user.name “xiangy"
git config --global user.email  "xiangy@163.com"

输入ssh gerrit -l admin命令,可以查询是否能得到gerrit服务器的响应

gerrit15.png

创建仓库

跟着我截的图一步一步操作创建
点击BROWSE-Repositories

gerrit8.png

点击CREATE NEW

gerrit9.png

输入仓库名称


gerrit10.png

以及设置Owner开放的组,这里我建了个xplay组,在新建成员后都会添加到该组,该组成员可以在各自gerrit界面看到该仓库!

gerrit11.png

回到组列表点击VIEW ALL

可以查看提交历史记录


gerrit16.png

下载代码

在项目钟查看下载地址复制


gerrit17.png

git中黏贴

 git clone "ssh://admin@192.168.1.169:29418/android-code"
gerrit19.png

如图所以代表克隆成功!!

第一次修改

首先在.git里修改config配置文件

修改push的地址

push = refs/heads/*:refs/for/*
命令的话是

git config remote.origin.push refs/heads/*:refs/for/*

增加这一段的作用是当push代码时会提交给gerrit审核,不加就不审核

修改postBuffer

postBuffer时控制项目大小,之前从Gerrit服务器下载代码会中断
最终如下


gerrit20.png

上面两步为每个项目的必要第一次操作,改完之后就不用再改了!
为方便测试,我添加了music的代码进去

第一次上传

$ cd android-code/
$ git add *
$ git commit -m "Frist comm"
$ git push

一般第一次上传会报错

missing Change-Id in commit message footer
gerrit21.png

解决方法
上面这个情况主要针对本地刚下载的仓库,也是第一次提交会出现这个情况!
输入如下指令后

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 xiangy@192.168.1.169:hooks/commit-msg ${gitdir}/hooks/
git commit --amend
 git push origin HEAD:refs/for/master

管理员回到gerrit服务器,激动人心的东西出现了!


gerrit22.png

第一次审核

管理员点开成员的审核申请界面如下:


gerrit23.png

点击此按钮可以对比查看更改内容


gerrit24.png

管理员能很清楚成员的代码操作,审核之后点击REPLY弹出如下界面

gerrit25.png

-2:代码不应该合并
-1:希望这代码不被合并
0:没有操作
1:希望代码合并
2:同意代码合并
我这里先点击-2,打回!!!
提交代码的成员服务器就会收到打回提示!

gerrit26.png

我这里重新编辑一下再提交审核,然后审核+2通过
注意提交与审核者都需要点击这个审核通过!

gerrit27.png gerrit28.png

右上放显示还原就说明成员提交的代码已经被合并了!
然后我们再查看代码库的更新记录

gerrit29.png

踩坑一:

由于之前的gerrit版本为2.1,删除重新安装3.0版本软件,启动一直报

root@ubuntu:~# /home/gerrit/gerrit_site/bin/gerrit.sh start
Starting Gerrit Code Review: FAILED
gerrit4.png

查找各种资料无果,部署失败!建议版本直接上最新

踩坑二:

我是拿两台电脑同时安装部署,一台电脑部署完了可以登陆成功,一台就一直报


gerrit5.png

对比了gerrit和nginx配置,一模一样,但是成功登录的一直成功,失败的一直失败,就问你内心蹦不崩!

踩坑三:

启动nginx失败

root@ubuntu:~# service nginx restart
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.

原因一:检查etc/nginx/conf.d/gerrit.conf文件
原因二:端口内apache2占用

service apache2 stop
pkill -9 nginx
service nginx reatart

踩坑四:

关于邮箱死活收不到通知问题,配置gerrit.config时,注意输入账号后输入的是smtp的授权码,而并非邮箱密码!


gerrit12.png

邮箱配置正确的话会收到Gerrit Code Review发送过来的确认邮箱!

踩坑五:

新建仓库没有显示git clon地址问题,是音乐刚开始安装gerrit时没有安装好
download-commands version v3.0.0

gerrit13.png

踩坑六

首次在Git Bash中下载代码报错

gerrit18.png

意思时没有访问权限或者存储库不存在!
这就是卡了我两天的一个大坑,最好解决方法相当简单,将你建的pub改名为id_dsa 再次clone

gerrit19.png

邮箱配置相关

QQ

[sendemail]
    #smtpServer = localhost
    enable = true
    smtpServer = smtp.163.com
    smtpServerPort = 465
    smtpEncryption = SSL
    sslVerify = true
    smtpUser = **@163.com
    smtpPass = 邮箱授权码
    from = CodeReview<**@163.com>

163

[sendemail]
    #smtpServer = localhost
    enable = true
    smtpServer = smtp.qq.com
    smtpServerPort = 465
    smtpEncryption = SSL
    sslVerify = true
    smtpUser = **@qq.com
    smtpPass = 邮箱授权码
    from = CodeReview<**@qq.com>

gerrit删除方法

/home/gerrit/gerrit_site/bin/gerrit.sh stop
然后直接删除/home/gerrit/gerrit_site/整个文件夹
$ ps -ef | grep gerrit

谷歌浏览器安装方法

 wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub  |  apt-key add -
 apt-get update
 apt-get install google-chrome-stable

常用到的指令

apt-get update  更新源
apt-get install package 安装包
apt-get remove package 删除包
apt-get upgrade 更新安装的包
mkdir -p code/string  #新建一个string文件夹  加上-p是指可以夸目录操作 不加就是在当前目录增加
touch code/string/lesson.js  #新建lesson.js文件
rm -rf  + 需要删除的文件
vim 编辑指令,当你需要编辑一个文本时使用  
      i  + Esc + Shift ZZ  保存编辑
      i + Esc + :+! 不保存编辑
cat 查看
whereis + 要查询的文件名  # 搜索

#重要,每次开启需要启动#
            /home/gerrit/gerrit_site/bin/gerrit.sh restart    重启gerrit
            service nginx restart  重启nginx
#重要#

注册登录账号
$ htpasswd -m /home/gerrit/gerrit.password master
ssh gerrit gerrit set-account --add-email admin@microwu.com admin 为账户配置邮箱

设置git账户信息
git config --global user.name “xiangy" 
git config --global user.email "xiangy@163.com"

修改push地址
git config remote.origin.push refs/heads/*:refs/for/*

git的push流程
$ git add * 
$ git commit -m "Frist comm" 
$ git push

相关文章

网友评论

    本文标题:从0开始部署使用Gerrit(Ubuntu+nginx+Gerr

    本文链接:https://www.haomeiwen.com/subject/kojorctx.html