Gerrit 配置

Stella981
• 阅读 985

环境:

gerrit server :176.23.47.118

管理员机器用户名:  su admin

gerrit 的管理员账号:admin

gerrit 工作流程


 gerrit工作流程的图:

Gerrit 配置

使用过git的同学,都知道,当我们git add --> git commit --> git push 之后,你的代码会被直接提交到repo,也就是代码仓库中,就是图中橘红色箭头指示的那样。

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

无论有新的代码提交待审核,代码审核通过或被拒绝,代码提交者(Contributor)和所有的相关代码审核人员(Integrator)都会收到邮件提醒。
gerrit还有自动测试的功能,和主线有冲突或者测试不通过的代码,是会被直接拒绝掉的,这个功能似乎就是右下角那个老头(Jenkins)的任务。

整个流程就是这样。 在使用过程中,有两点需要特别注意下:

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

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

    假如我们远程只有一个master主线,那么只有当你的代码被提交到refs/for/master分支时,gerrit才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。
    当审核通过之后,gerrit会自动将这条分支合并到master主线上,然后邮件通知相关成员,master分支有更新,需要的成员再去pull就好了。而且这条refs/for/master分支,是透明的,也就是说普通成员其实是不需要知道这条线的,如果你正确配置了sourceTree,你也应该是看不到这条线的。

这两点很重要!!这两点很重要!!这两点很重要!!

为管理员admin配置SSH Public Keys:

第一个Gerrit 账户自动成为权限最高的管理员,因为Gerrit 安装完毕后第一件事就是立即注册或者登录,以便初始化管理员账号


Gerrit 配置

这里需要把你的公钥钥匙拷贝出来,然后粘贴在对话中

生成公私钥对


首先切换到 admin用户下 ,在命令行中输入: 

[root@localhost home]# su admin
[admin@localhost home]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.

找到公钥钥匙:


   默认公私钥的是放置在~/.ssh目录下的,默认的名称是id_rsaid_rsa.pub。其中.pub文件就是公钥,私钥你自己需要保存好。我们要做的,就是把公钥的内容拷贝出来,然后粘贴到页面上去。注意拷贝时,要从RSA开始拷贝,如果格式不对,页面上会有提示。拷贝完成之后如下图所示:

Gerrit 配置

测试SSH key是否提交成功,在client 服务器上执行以下命令:

#ssh -p 29418 admin@ip地址 

ps:一定要切换到你生成 公钥私钥的用户下 gerrit, 29418为gerrit上SSH服务器监听的端口,admin为登录的gerrit账号(admin 账号为我的管理员账号),并且该账号已经登录了gerrit服务器,而且公钥已经上传。

176.23.47.118为gerrit服务器的IP

[root@localhost .ssh]# su gerrit
[gerrit@localhost .ssh]$ ssh -p 29418 admin@176.23.47.118

  ****    Welcome to Gerrit Code Review    ****

  Hi admin, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://admin@localhost:29418/REPOSITORY_NAME.git

在gerrit服务器上创建普通用户:

Linux下的用户名须和管理员给的Gerrit账号名相同,如果没有,请添加新用户:


 Gerrit服务器使用的是HTTP认证类型,并用nginx做反向代理,创建用户使用以下命令:

[root@localhost .ssh]# htpasswd -m /home/gerrit/gerrit.password  tana
New password: 
Re-type new password: 
Updating password for user tana

创建普通用户 tana ,在gerrit网页登录进去,按照配置admin的路径 给tana用户配置ssh keys。

[tana@localhost ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tana/.ssh/id_rsa): 
Created directory '/home/tana/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tana/.ssh/id_rsa.
Your public key has been saved in /home/tana/.ssh/id_rsa.pub.

配置成功后下图所示:

Gerrit 配置

管理员访问SSH的管理接口


 在gerrit个人配置界面中设置了公钥之后,就可以连接Gerrit的ssh服务器执行命令。注意远程gerrit服务器的端口不要被防火墙拦截,gerrit的ssh服务器使用的特殊的端口,默认是29418,任何用户都可以通过 ssh连接执行 ls-projects 命令查看项目列表

[tana@localhost root]$ ssh -p 29418 176.23.47.118 gerrit ls-projects
All-Projects
All-Users
projec1
test3

通过ssh 创建新项目:

管理员admin 可以使用命令行创建新项目 test3:

[admin@localhost root]$ ssh -p 29418 176.23.47.118 gerrit create-project test3

创建group并创建一个project


Gerrit 配置

图片是gerrit默认的分组,之后我们还可以建立新的分组,加入新的成员

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

创建一个group


 登录Gerrit管理员账号admin,创建一个新的组为test1。并将tana账号加入该组

Gerrit 配置

 Gerrit 配置

Gerrit 配置

Gerrit 配置

创建一个project


 创建一个project1 :BROWSE->Repositores->CREATE NEW

Gerrit 配置

BROWSE->Repositores->Access->ADD REFERENCE->ADD

Gerrit 配置

Gerrit 配置

tana用户clone工程


 clone工程到本地


切换到tana用户上,下拉刚刚创建的 projec1工程:

执行命令:#git clone ssh://tana@176.23.47.118:29418/projec1.git

[tana@localhost ~]$ git clone "ssh://tana@172.23.57.119:29418/project5" && scp -p -P 29418 tana@172.23.57.119:hooks/commit-msg "project5/.git/hooks/"
Initialized empty Git repository in /home/tana/project5/.git/
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), done.
commit-msg 100% 1791 1.8KB/s 00:00

[tana@localhost ~]$ ls 

project5

进入到/home/tana/中,我们发现多了一个 projec1的文件夹。这个文件夹就是我们下拉下来的projec1 工程了

下面新建一个 test.md文件 ,尝试着提交:

提交


 首先我们通过下面两个命令首先commit到本地仓库:

[tana@localhost ~]$ cd /home/tana/projec1/
[tana@localhost projec1]$ vim test.md
just for test
"test.md" [New] 1L, 14C written                                                                      
[tana@localhost projec1]$ git add test.md 
[tana@localhost projec1]$ git commit

我们把这次提交命名为 test 20190419 commit

Gerrit 配置

 然后我们通过git push命令来推送,发送推送失败了,错误如下:

Gerrit 配置

我们设置了push命令之后,重新进行push,结果报错了。。这次是报 邮箱没有注册,下面我们来配置邮箱。

配置邮箱


修改gerrit.config配置文件

Gerrit 配置

注意: smtppass是邮箱的授权码密码,不是你的登录密码,授权码需要在邮件网页端登录设置,允许第三方客户端登录

from 是发送注册邮箱的

用户绑定邮箱


 登录到 gerrit上面去,settings->Email Addresses 去设置注册邮箱:

输入你的邮箱地址,注意每个用户的邮箱地址都是唯一的,不能多个用户用同一个邮箱注册

Gerrit 配置

然后登录邮箱,点击链接进行注册:

Gerrit 配置

 点击链接注册成功以后,我们可以在 settings->Profile 看到有邮箱地址了

配置commit 的名称和email


 在commit的时候,发现提交者的名称和email都是错误的,我们需要先配置成我们当前的tana用户,以及对应的email

Gerrit 配置

[tana@localhost projec1]$ git config user.name tana
[tana@localhost projec1]$ git config user.email ytyt@cypress.com

通过git config --list来查看一下当前git仓库的配置,发现已经把用户名和密码正确设置了。

Gerrit 配置

然后我们通过git push命令来推送:

 Gerrit 配置

Gerrit拒绝了我们直接提交到master的推送!

这就是我们在文章开头提到的问题,我们需要push到refs/for/master那条线上!!

我们在命令行写入下面的命令:

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

这行命令的意思是,当执行push命令时,将会推送到refs/for/当前head所在的分支上。

 然后再执行git push命令:

Gerrit 配置

这次的错误是:

Gerrit 配置

这个是提到的第2个问题,commit一定要有Change-Id
然后我们看到了命令行中给了我们提示,我们可以从hooks文件中拷贝commit-msg文件下来,这样commit时,会自动帮我们生成Change-Id.

我们在命令行写入下面的命令:

我们可以看一下 git rev-parse --git-dir就是指向的当前git配置的文件,就是.git文件夹
所以我们直接用scp命令从gerrit服务器上拉取当前用户的hooks文件。

注意这个命令要在project5文件夹上一层目录做:/home/tana

[tana@localhost ~]$ scp -p -P 29418 tana@172.23.57.119:hooks/commit-msg "project5/.git/hooks/"
commit-msg 100% 1791 1.8KB/s 00:00

然后后我们重新push发现一样的错误,因为我们还停留在上次commit,上次的commit是没有生成Change-Id的! 但是我们回退一下,然后重新提交。
回退命令是先用git log找到上一次的commit id, 然后用git reset --hard 找到的id命令回退,还是不行,不知道什么原因,我把整个工程删除,直接在 clone的时候就拉取当前用户的hooks文件。

参考文献:

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这