描述:

百度百科:Gerrit,一种免费、​​开放源代码​​的代码审查软件,使用网页界面。

需求:根据公司要求配置管理Gerrit码仓,因Gerrit的自身界面以及长时间使用gitlab的习惯,一时间无法快速上手故此留此篇。

1 设置项目管理员免密访问 Gerrit

项目管理员在Gerrit上做任何配置之前,需要先设置好与Gerrit之间的免密访问,下面以 CentOS-7.7.1908 x86-64 为例说明,Windows(Git Bash 中)下的免密访问配置与此相同:

(1) 本地生成 SSH Key:

ssh-keygen -t rsa -C lishilong@XXX.com  ,lishilong@xxx.com 是项目管理员的邮箱地址。

(2) 查看公钥:

cat .ssh/id_rsa.pub

(3) 登录 Gerrit 配置公钥:

Login into Gerrit as Project Owner: lishilong, 执行: 账户名 -> Settings -> SSH Keys -> New SSH Key -> 输入上一步的 Public Key -> Add NEW SSH KEY -> 单击 SAVE

CHANGES 按钮保存。示例效果:

Gerrit码仓之分配权限使用方法秘籍_项目管理

1.1 创建项目

(1) 创建项目

以项目管理员账户如:lishilong 登录 Gerrit, BROWSE -> Repositories -> CREATE NEW

-> 输入 Repository Name(建议格式为:部门/业务单元 Code/应用 Code, 例如:IOT/PAAS_CI/ci_demo,下文已该项目为例),其他选项保持默认值,单击 CREATE 按钮创建项目。示例效果:

Gerrit码仓之分配权限使用方法秘籍_项目管理_02

(2) 更新项目 Description

BROWSE -> Repositories -> 单击上一步新建的项目,Description 中输入描述信息(建议格式:<团队名称>:<一句话描述该项目>,以 ci_demo 源码为例说明:基础云:CI 示例项目,然后单击页面下方的 Save Changes 按钮保存。示例如下:

Gerrit码仓之分配权限使用方法秘籍_git_03

1.2 删除项目

项目管理员登录 Gerrit 后 -> BROWSE -> Repositories -> IOT/CI_PAAS/ci_demo -> Command-> 单击 DELETE PROJECT 按钮,在弹出的层中勾选: Delete project even if open chang, 在单击 DELETE 按钮删除。示例效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_04

1.3 配置项目权限

本小节展示 Gerrit 上一个源码类项目的 Acces 配置示例,各开发团队可参考该部分操步骤配置

自己本团队的源码类项目。

1.3.1 授权规划

(1) 项目分支

规划 2 个分支:master:主分支;develop:活动分支;

本小节为了示例的需要,规划了 2 个分支,各项目管理员可根据项目的需要合理规划分支。

(2) 角色规划

ci_demo_owner: lishilong; 该角色是项目管理员申请加入 Gerrit 中的Administrators 组后获取到的(或者自己是管理员);Access: 查看项目信息(包括 Gitweb 超链接),创建项目,创建分支,创建 Tag, 创建 Group,配置项目权限,删除 CR 记录,+1,+2, Submit, Force Push 等权限;

ci_demo_leader: usera; Access: 查看项目信息(包括 Gitweb 超链接), 查看 Group 信息,发起 CR, 创建分支,创建 Tag, +1, +2, Submit; ci_demo_dev: userb;Access: 查看项目信息(包括 Gitweb 超链接), Group 信息,发起 CR。

1.3.2 创建 Leader 组和 Developer 组

根据角色规划,需要对 Leader(审核人员)创建一个组,如:ci_demo_leader。对开发者创建一个组,如: ci_demo_dev,而 ci_demo_owner 是由 Gerrit 的运维管理员统一创建的。

1.3.2.1 创建 Leader 组

(1) 创建 Group

BROWSE -> Groups -> CREATE NEW -> 输入 Group Name,如:ci_demo_leader, 点击 CREATE按钮创建;示例效果:

Gerrit码仓之分配权限使用方法秘籍_项目管理_05

(2) 添加成员

BROWSE -> Groups -> ci_demo_leader -> Members -> Members 输入框中输入 Leader 账户名(系统将自动匹配到该账户信息,选中) -> 单击 Add 按钮。示例效果如下:

Gerrit码仓之分配权限使用方法秘籍_项目管理_06

1.3.2.2 创建 Developer 组

(1) 创建 Group

BROWSE -> Groups -> CREATE NEW -> 输入 Group Name,如:ci_demo_dev, 点击 CREAE 按钮创建。

(2) 添加成员

BROWSE -> Groups -> ci_demo_dev-> Members -> Members 输入框中输入开发者账户名(系统将自动匹配到该账户信息,选中) -> 单击 Add 按钮。示例效果如下:

Gerrit码仓之分配权限使用方法秘籍_git_07

1.3.3 配置本项目可查看成员

项目管理员登录 Gerrit 后 -> BROWSE -> 下拉选择 Repositories -> IOT/xxx_CI/xxx_demo -> A -> EDIT,配置步骤示例:

Gerrit码仓之分配权限使用方法秘籍_git_08

  单击 EDIT 按钮后显示 ADD REFERENCE 按钮,单击 ADD REFERENCE 按钮 -> 输入框中输入(或单击Reference 后面的修改图标,):refs/* -> Add Permission…, 选择 Read,单击权限下来列表后的 ADD 按钮添加 -> Add Group 输入框中分别输入:ci_demo_owner、ci_demo_leader、ci_demo_dev、Non-Interactive Users (系统根据输入将自动匹配) -> 单击 Exclusive 选项,前面单击页面配置部分顶部的的 SAVE 按钮保存更改。

  后续配置 A 的操作均与此步相同,将不在描述具体操作步骤。配置步骤示例:

Gerrit码仓之分配权限使用方法秘籍_git_09

  配置完成后示例效果(增加 Non-Interactive Users Group,截图需更新):

Gerrit码仓之分配权限使用方法秘籍_输入框_10

1.3.4 配置本项目所有成员可查看分支信息

  针对本项目的 refs/heads/*,增加 Read 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_11

4.5.5 配置 Leader 创建分支权限​

  针对本项目的 refs/heads/*,增加 Create Reference 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_12

1.3.6 配置 Leader 删除分支权限​

  针对本项目的 refs/heads/*,增加 Delete Reference 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_13

  删除分支时,首先单击分支后面的 DELETE 按钮,在弹出的窗口中单击 DELETE BRANCH 按钮(删除前请确认你确实需要删除该分支);操作示例:

Gerrit码仓之分配权限使用方法秘籍_git_14

  1.3.7 配置自动/手工+1 权限如果需要自动+1(流程默认配置),需要将 Label Verified 赋予 Non-Interactive User Group(该组中只有 jenkins 一个用户, 该用户被运维管理员已经添加到该组中了);如果是手工+1,需要将 Label Verified 赋予 Leader 组。针对本项目的 refs/heads/*,增加 Label Verified 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_15

1.3.8 配置 Leader +2 权限​

  针对本项目的 refs/heads/*,增加 Label Code-Review 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_16

1.3.9 配置 Leader Submit 权限

针对本项目的 refs/heads/*,增加 Submit 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_git_17

1.3.10 配置 Leader Fore Push 权限​

针对本项目的 refs/heads/*,增加 Push 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_项目管理_18

1.3.11 配置指定用户对指定项目发起 Code Review​

针对本项目的 refs/for/refs/*,增加 Push、Push Merge Commit 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_19

1.3.12 配置项目成员访问 Gitweb 权限​

比如希望 ci_demo_leader ci_demo_dev 组内的开发者能正常访问 gitweb,即访问 Repository Browser 中的 gitweb 超链接:

Gerrit码仓之分配权限使用方法秘籍_输入框_20

链接点进去后效果:

Gerrit码仓之分配权限使用方法秘籍_项目管理_21

1.3.13 配置项目管理员修改项目配置的权限​

针对本项目的 refs/meta/config,增加 Push 权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_git_22

1.3.14 配置项目管理员和 Leader 打 Tag 权限​

针对本项目的 refs/tags/*,增加下面权限,配置后效果:

Gerrit码仓之分配权限使用方法秘籍_输入框_23

  因为项目管理员在创建 ci_demo_leader 组时已经把自己加在该组中了,所以此处将权限分配给ci_demo_leader 组,项目管理员也拥有了这个权限。

1.4 提交项目初始结构至 Gerrit

  Gerrit 中项目权限配置完成后,项目管理员需要把自己本地工作空间的项目初始结构提交至Gerrit 上创建的项目下,以供开发人员进行协同开发。具体操作步骤:

(1) Login into Gerrit as Project Owner: lishilong

(2) BROWSE -> Repositories -> 点击 IOT/PAAS_CI/ci_demo 项目 Repository Browser 的 git web 链接,进入 GitWeb 页面获取项目 clone 地址路径(注意是:SSH 协议的 URL);操作示例:

Gerrit码仓之分配权限使用方法秘籍_输入框_24

Gerrit码仓之分配权限使用方法秘籍_git_25

(3) Clone 项目到本地

git clone ssh://xxxxxxx/ci_demo.git

(4) 进入 Clone 到本地的项目路径 ci_demo 下,然后将准备好的项目初始结构复制到 ci_demo 目录下,根据本项目的需要修改.gitignore 文件;

(5) 执行提交操作

//当前目录下文件/目录纳入版本控制

git add .

//全局配置,当本地有多个项目时,只需配置一次

git config --global user.name "lishilong"

git config --global user.email lishilong@xxx.com

//提交推送到远程服务器

git commit -m 'Init Project’

git push -u origin master

至此 Gerrit 中项目配置部分完成,针对非 master 分支如需进行 Code Review,请参考 其他文档配置。