当前位置:   article > 正文

Gerrit基本使用说明_gerrit修改密码

gerrit修改密码

Gerrit基本使用说明

版本号:V2.0.2

目录

Gerrit基本使用说明... 1

目录

1 Gerrit简介

2 Gerrit使用教程

2.1 简述

2.2 管理员角色

2.2.1 编译服务器上的配置

2.2.2 Gitosis上的配置

2.2.3 Gerrit上的配置

2.2.4 Jenkins上的配置

2.2.5 初始化仓库(可选)

2.3 开发者角色

2.3.1 Gerrit用户信息配置

2.3.2 编译服务器上的开发

2.3.3 Gerrit上的审查处理

2.3.4 线上讨论

2.3.5 修改原变更再提交

2.3.6 代码合并冲突

2.4 审查者角色

2.4.1 Gerrit用户信息配置

2.4.2 Gerrit上的审查处理

2.4.3 为仓库增删开发者

2.4.4 新增分支

2.4.5 删除分支

2.5 管理员操作补充

2.5.1 项目管理

2.5.2 下载安装gerrit插件

2.5.3 修改mysql编码格式使得Gerrit可以显示中文

2.5.4 http验证方式修改密码

2.5.5 组管理

调试

2.6 小结

3 常见问题

3.1 hook脚本commit-msg出错(已添加到正常步骤)

3.2 Gitosis和Gerrit仓库同步注意事项

3.3 mysql导致Gerrit启动失败

3.4 push代码提示缺少Change-ID

3.5 push代码提示无权限

3.6 git revert失败

3.7 push提示: no new changes

3.8 提交曾被Abandon过的变更

3.9 仓库同步失败-replication配置错误

3.10 仓库同步失败-远程仓库服务器空间满

3.11 无法添加reviewer

3.x 问题模板


1 Gerrit简介

Gerrit是一个基于web的代码评审工具,它基于Git版本控制系统,由Google内部编写用于代码评审管理。Gerrit旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅。Gerrit提供了一个临时区域,将本地提交与远程仓库隔离开,开发人员将‎‎更改上传到Gerrit,在它们被审阅通过前并不会直接上传到远程仓库。

要了解Gerrit如何帮助强化开发人员的工作流程,请考虑如下一个典型的项目。该项目有一个中心源存储库作为项目内容的权威副本,例如Git版本控制系统中的远程仓库。开发者从远程仓库中同步数据,或更新数据到远程仓库中;持续集成服务器从远程仓库中获取代码后自动编译验证等。

Figure 1. Central Source Repository

而Gerrit取代了这个中心源存储库,并添加了一个附加的概念:挂起的变更存储区(a store of pending changes)。

Figure 2. Gerrit in place of Central Repository

使用gerrit,当开发人员提交变更时,它将被发送到这个挂起的变更存储区,其他开发人员可以在这里审查、讨论和批准变更。在足够多的审查人员批准后,变更才能成为代码库的正式组成部分。

除此存储挂起的变更外,Gerrit还捕获有关每个变更的说明和评论。这些特性允许开发人员在方便的时候再查看变更,或者当不能面对面地讨论变更时可以线上查看。它们还可以帮助创建有关给定变更的对话记录,从而提供变更发生时间和原因的历史记录。

与任何存储库托管解决方案一样,Gerrit具有强大的访问控制模型,这允许我们控制存储库的访问权限。

2 Gerrit使用教程

2.1 简述

 

我们的CI(可持续集成)体系是Gitosis+Gerrit+Jenkins,Gitosis是远程仓库;Gerrit用于代码审核;Jenkins用于自动化测试Verified(此步可去掉,由提交者自己Verified)。

下面用一个简单例子说明使用的方法。Gitosis和Gerrit上的仓库可以是同名的,为了讲述清楚这里用了两个不同的名字,在Gitosis上有仓库名为DEMO_GITOS(假设仓库在服务器192.168.113.14),在Gerrit Web上对应的仓库名为DEMO_GERRIT;有两个开发者developer1和developer2,有审查者reviewer1和管理员admin,他们都在服务器192.168.113.11中。流程:

管理员配置(新建仓库,定义组权限等)->管理员分发账号给开发者->开发者克隆代码、修改代码并提交审查请求->开发者增加审查者->Jenkins自检通过->审查者审查提交。

2.2 管理员角色

管理员需要完成的工作有:

1)编译服务器环境配置及账号管理;

2)新建代码仓库并配置Gerrit、Jenkins协作;

3)代码权限管理;

2.2.1 编译服务器上的配置

更新Git版本为2.6.5以上

Gerrit的commit-msg hook中interpret-trailers指令需要Git版本为2.6.5以上,而ubuntu14.04的源中的git版本为1.9.1,解决方法:

[在线安装]

手动增加ppa的源后安装git:

sudo add-apt-repository ppa:git-core/ppa

sudo apt-get update

sudo apt-get install git

[离线安装]

到git官网->Tarballs下载2.20.1版本的源码包:

然后在服务器上解压,安装:

tar -xzvf git-2.20.1.tar.gz

cd git-2.20.1

./configure --prefix=/usr/

其次,为了使gitconfig文件配置为/etc/目录下,修改config.status文件去掉${prefix}

make -j8

sudo make install

git --version

另外需要解决手动离线安装后无法自动补全git命令的问题:

cd contrib/completion

sudo cp git-completion.bash /etc/bash_completion.d/

然后重新打开一个shell终端登录即可。

设置git commit-msg hook

配置本地仓库的git hook,该过程用来在commit-msg中加入Change-ID,这是gerrit流程必须的,Change-ID就是待审查的变更的标识。

1)管理员克隆All-Projects仓库时下载commit-msg hook

使用admin账号登录Gerrit Web,BROWSE->Repositories->ALL-Projects->Clone with commit msg hook

在Gerrit服务器192.168.113.11登录其Linux账号,克隆代码仓和hook:

git clone ssh://admin@192.168.113.11:29418/All-Projects

scp -p -P 29418 admin@192.168.113.11:hooks/commit-msg All-Projects/.git/hooks/

然后将All-Projects/.git/hooks/commit-msg取出来,用于下一步的服务器git模板配置。

2)管理员配置全局的git hook模板

将步骤1)的commit-msg文件拷贝到服务器中新建的/etc/.git_template目录下,设置:

sudo mkdir -p /etc/.git_template/hooks

sudo cp commit-msg /etc/.git_template/hooks

sudo git config --system init.templateDir /etc/.git_template

以后该服务器的Linux用户在拉取仓库后都会自动设置commit-msg文件。

分配编译服务器账号

管理员为开发者和审查者分配Linux账号(需与其Gerrit上账号同名),并生成sshkey:

sudo adduser developer1

su - developer1

ssh-keygen -t  rsa

cd ~/.ssh

mv id_rsa.pub developer1@ubt113-11.pub

chmod 755 developer1@ubt113-11.pub

Gerrit账号的分配见CH 2.2.3 Gerrit上的配置-用户管理。

2.2.2 Gitosis上的配置

配置DEMO_GITOS仓库权限

1)添加用户的ssh public key到gitosis的keydir目录中

假设developer1、2是参与开发;reviewer1不参与开发,只评审代码。共3个公钥。

2)管理员在Gitosis中为新仓库DEMO_GITOS进行配置

为Gerrit管理员的Linux账号添加读写权限;为两个developer和reviewer1添加代码只读(下载)权限。在gitosis.conf文件中内容如下:

[group GERRIT_ADMIN]

members = gerrit@ubt65-16

writable = GERRIT_TEST DEMO_GITOS

[group DEMO_GITOS]

members = developer1@ubt65-16 developer2@ubt65-16 reviewer1@ubt65-16

readonly = DEMO_GITOS

第一组GERRIT_ADMIN只有gerrit用户,对GERRIT_TEST、DEMO_GITOS两个仓库拥有读写权限,其中DEMO_GITOS是新增的,并且写权限是自动同步DEMO_GERRIT与DEMO_GITOS两个仓库所需要的(后文要设置Gerrit和Gitosis自动同步功能);第二组DEMO_GITOS,是待管理的代码仓库,成员包括所有开发人员,只有读权限。

提交以上修改到gitosis仓库使配置生效:

git add gitosis.conf keydir

git commit -m "Add for Gitosis+Gerrit+Jenkins Demo"

git push origin master:master

新建DEMO_GITOS仓库

在服务器192.168.113.11上使用Gerrit管理员账号gerrit新建DEMO_GITOS仓库

su  -  gerrit

mkdir  -p /mnt/external/gerrit/DEMO_GITOS/

cd /mnt/external/gerrit/DEMO_GITOS/

git init

touch init.txt

git add init.txt

git commit -m "Initialize repository"

git remote add origin neoway@192.168.113.14:DEMO_GITOS.git

git push origin master

2.2.3 Gerrit上的配置

配置SSH Key

1)若用户linux账号的~/.ssh目录不存在,则运行ssh-keygen -t rsa生成sshkey(若存在则跳过此步骤)

2)将公钥~/.ssh/id_rsa.pub中内容拷贝至gerrit服务器的该用户账号中

以管理员账号admin为例,登录http://192.168.113.11:8090/进入gerrit review code界面,Settint->SSH Keys,然后把刚才的公钥粘贴到New SSH Key那一栏,然后点击ADD NEW SSH KEY即可:

验证sshkey是否配置成功,若成功则可以直接ssh连接:

ssh <username>@<server ip> -p 29418

看到welcome就表示你已配置完成(若链接异常可删除~/.ssh/knows_host重试):

用户管理

使用gerrit账号登录Gerrit所在的Ubuntu服务器。

(1)添加新用户,Linux下的用户名须和管理员给的Gerrit账号名相同

sudo htpasswd -b /etc/apache2/passwords <username> <code>

(2)修改用户密码

sudo htpasswd -b /etc/apache2/passwords <username> <newcode>

(3)删除用户

sudo htpasswd -D /etc/apache2/passwords <username>

此处不赘述为developer1、developer2、reviewer1添加用户的操作。

新建DEMO_GERRIT仓库

详见脚本gerrit_new_proj.sh,也可手动创建。脚本用法:

./gerrit_new_proj.sh <PROJECT>

创建新的代码仓库,并自动写入replication描述;

注意文件内部有一个变量repo_url需要根据仓库地址(深圳/西安)手动修改;

使用的前提:

gitosis中已经创建好了远程代码仓库,并且为gerrit管理员账号开通了读写权限;

默认在gitosis和gerrit上的仓库名称一致;

Code Review是在Gerrit Web上进行的,而Gerrit上现在是没有项目的,想让Gitosis上的项目能在Gerrit Web上被Code Review的话,必须在Gerrit上创建对应项目,并有相同的仓库文件。上文中[Gitosis上的配置]章节中,讲述了在Gitosis上创建对应的DEMO_GITOS仓库的步骤,现在则在Gerrit上创建DEMO_GERRIT仓库。

1)登录Gerrit服务器上Linux账号gerrit,创建DEMO_GERRIT仓库

ssh -p 29418 admin@192.168.113.11 gerrit create-project DEMO_GERRIT

该命令格式:ssh -p <port> <host> gerrit create-project [options] <proj>

2)克隆Gitosis上的DEMO_GITOS仓库到Gerrit上

cd /home/gerrit/repositorys //即登陆到gerrit安装目录的git

rm -rf DEMO_GERRIT.git  //删除空仓库

git clone --bare neoway@192.168.113.14:DEMO_GITOS.git //创建并将远程Gitosis上的项目内容发布到Gerrit

另外,若仓库地址有变(如迁移到西安),以8909_APP_L.git为例,步骤如下:

git clone --bare neoway@192.168.113.14:8909_APP_L.git

cd 8909_APP_L

git push --mirror neoway@192.168.65.17:8909_APP_L.git

对于非首次建的Gerrit仓库,将其当作新仓库push到新repo时会有很多change分支:

但这并不影响,因为用户重新git clone下来则看不见了。

3)修改项目的名字为上面步骤创建的名字(可选)

mv DEMO_GITOS.git DEMO_GERRIT.git

4)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/985628
推荐阅读
  

闽ICP备14008679号