gerrit系统如何配置访问控制
.
版本:v0.3
作者:河东西望
日期:2022-7-13
.
gerrit系统的上手使用有两个难点:
- 部署repo仓库。
- 配置访问控制。
想要上手使用gerrit的同仁们,搭建部署好gerrit系统之后,会发现gerrit的权限配置不知道从哪里下手。而默认的权限配置非常简单而且开放,不符合企业各种开发管理的需求场景。
gerrit系统上的官方帮助文档很全面,各种概念都讲解得很细致。但是使用gerrit的方式,每个人可能都有不同的方式。只要研发团队用起来上手简单,操作流畅,每种方式都是可行的。
在AOSP的项目开发中,gerrit的使用方式有多种:
- 仅仅作为代码仓库系统使用,可以跟gitlab一样作为纯git仓库,也可以是大型repo仓库。
- 仅仅作为代码评审系统使用。一般较多的使用方式是gitlab+gerrit组合。这种方式不少公司在使用。
- 作为完整的代码仓库系统+代码评审系统使用。
本文档不讲解gerrit的概念和原理,主要介绍项目实践中访问控制是如何配置使用的。repo仓库的部署搭建可以参看我的其他博文。
1 关键概念
使用gerrit之前,我们还是要了解几个关键概念:群组Group,仓库Repository,引用Refernece,权限Permission。
群组Group
gerrit的权限所授予的对象主要是群组Group(虽然也可以针对个人,但它不是常态的权限配置方式)。每个人总是属于一个或者多个群组。
仓库Repository
gerrit中的仓库有多种:正常的代码仓库,权限仓库,项目清单仓库,repo工具仓库等等。
gerrit的访问控制是通过权限仓库来完成的,默认的两个权限仓库是all-projects和all-users(all-users仓库我个人基本没有用到)。权限仓库对普通用户是只读的。
所有的仓库都是通过继承all-projects来配置权限的。我们要配置权限,就是创建子仓库,然后配置这个子仓库的权限,提供给代码仓库继承来实现的。
引用Reference
就是git仓库的各种引用,包括分支,标签,meta属性等。
权限Permission
权限,也就是访问控制Access Control,它的作用对象是仓库的引用reference。
可以归纳一句话来理解:仓库的访问控制就是把其引用Reference的权限授予给群组。(也不好理解?!往下看)
2 需求场景
作为企业的开发团队来说,一般的需求场景是这样的:
- 有多个不同的部门,每个部门不能互相看到其他部门的代码。
- 所有部门有如下几种角色:开发者developer、评审者reviewer,项目owner。
- 不同部门的项目代码仓库的分支策略可能不一样,但是一般有这几个分支:develop、test、product。
- 开发组developer只能操作develop分支:clone,push权限,review+1权限,其他分支只可clone,不能push。
- 评审组reviewer只能操作developer分支:除了developer权限之外,还有review+2,submit权限。
- 项目组owner可以操作所有分支,权限还包括merge,增删分支、增删标签等。
我们可以看一下部门矩阵图:
部门
├── DEV01
│ ├── 项目组
│ ├── 评审组
│ └── 开发组
├── DEV02
│ ├── 项目组
│ ├── 评审组
│ └── 开发组
└── DEV03
├── 项目组
├── 评审组
└── 开发组
还有仓库分支图:
仓库分支
├── develop
├── test
└── product
3 配置策略
根据上述的需求场景,我们可以采取如下权限管理策略:
- 原始的all-projects仓库不要动,创建自己的权限仓库all-projectx。所有的仓库继承这个权限仓库。
- 在all-projectx上修改权限配置。
- 如果还想要继续创建更多的权限配置,就继承这个all-projectx。
- 在子仓库继承的引用权限中,可以通过Exclusive选项来确认是否需要继承父系权限。
我这里对应创建三个群组:
- developers
- reviewers
- leaders
在每个仓库中,我们只需要配置如下几个引用,其他以后逐步细化配置:
- refs/for/* : 源代码
- refs/head/XXX: XXX分支
- refs/tag/*: 标签
而在权限配置中,我们只需要配置如下几个基本权限:
| 权限 | 作用于 |
|---|---|
| Abandon | git abandon |
| Create Reference | git branch/git tag |
| Delete Reference | git branch |
| Forge Committer Identity | git push origin HEAD:refs/for/xxx |
| Push | git push --all |
| Add Patch Set | git apply |
| Push Merge Commits | git merge |
| Create Annotated Tag | git tag -a |
| Create Signed Tag | git tag -s |
| Read | git clone/pull/fetch |
| Rebase | git rebase |
| Revert | git revert |
| Submit | web页面的submit权限 |
实际上,gerrit权限配置之所以上手比较复杂,就在这两个点上: 一个是reference,一个是permission。弄清他们的意义,以及跟git引用的对应关系,是需要时间的。官网上概念虽然很详细,但是具体怎么用,还是一头雾水。这里就化繁为简,采取简单方式,配置出基本的权限控制策略。
all-projectx仓库的Access控制操作,由管理员在页面上进行,操作步骤:
- Add Reference (refs/for/, refs/tags/, refs/head/develop, refs/head/product ...)
- Add Permission (Abandon, Create Reference, ...... Submit)
- Add Group (developers, reviewers, leaders)
- 配置控制 (Allow, Deny, Block)。需要给谁什么权限就配置Allow。
下面是配置文件Project.config模板:
[access]
inheritFrom = All-Projects
[submit]
action = inherit
[access "refs/head/develop"]
abandon = group developers
abandon = group leaders
abandon = group reviewers
addPatchSet = group developers
addPatchSet = group leaders
addPatchSet = group reviewers
create = deny group developers
create = group leaders
create = group reviewers
createTag = deny group developers
createTag = group leaders
createTag = group reviewers
delete = deny group developers
delete = deny group reviewers
delete = group leaders
forgeCommitter = group developers
forgeCommitter = group leaders
forgeCommitter = group reviewers
push = group developers
push = +force group leaders
push = group reviewers
pushMerge = group developers
pushMerge = group leaders
pushMerge = group reviewers
read = group developers
read = group leaders
read = group reviewers
rebase = group developers
rebase = group leaders
rebase = group reviewers
revert = group developers
revert = group leaders
revert = group reviewers
submit = deny group developers
submit = group leaders
submit = group reviewers
[access "refs/head/product"]
abandon = deny group developers
abandon = group leaders
abandon = group reviewers
addPatchSet = deny group developers
addPatchSet = group leaders
addPatchSet = group reviewers
create = group leaders
createTag = deny group developers
createTag = group leaders
createTag = group reviewers
delete = deny group developers
delete = group reviewers
forgeCommitter = deny group developers
forgeCommitter = group leaders
forgeCommitter = group reviewers
push = deny group developers
push = +force group leaders
push = group reviewers
pushMerge = deny group developers
pushMerge = group leaders
pushMerge = group reviewers
read = group developers
read = group leaders
read = group reviewers
submit = deny group developers
submit = group leaders
submit = group reviewers
[access "refs/for/*"]
push = group developers
push = +force group leaders
push = group reviewers
read = group developers
read = group leaders
read = group reviewersFILE
gerrit系统如何配置访问控制的更多相关文章
- ASP.NET Core的身份认证框架IdentityServer4--(3)令牌服务配置访问控制跟UI添加
使用密码保护API OAuth 2.0 资源所有者密码授权允许一个客户端发送用户名和密码到IdentityServer并获得一个表示该用户的可以用于访问api的Token. 该规范建议仅对" ...
- Gerrit系统框架介绍
Gerrit目录介绍 转自:https://blog.csdn.net/tanshizhen119/article/details/79889242 先上图 bin/ : 主要是放gerrit.sh启 ...
- Gerrit 系统初探 (已转移到 https://steemit.com/gerrit/@linvictor88/gerrit )
Gerrit 使用简介 Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面.利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或 ...
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置:第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置.要了解配置同步机制的实现原理,先得从认识一个 ...
- Linux 桌面系统字体配置要略
字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体. ...
- 在Mac系统上配置Android真机调试环境
在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...
- 全新重装win8.1系统后 配置开发及办公环境步骤
全新重装win8.1系统后 配置开发及办公环境步骤 这两天,系统因配置开发环境出错,重装了一下,为日后方便,故此记录系统配置流程,防日后重装系统计划不周. 安装前,对照步骤,准备好下列安装文件. 0. ...
- C/C++通过WMI和系统API函数获取获取系统硬件配置信息
转载:http://www.cnblogs.com/renyuan/archive/2012/12/29/2838716.html 转载:http://blog.csdn.net/jhqin/arti ...
- Win7系统上配置使用Intellij Idea 13的SVN插件
Win7系统上配置使用Intellij Idea 13的SVN插件 http://blog.csdn.net/jeepxiaozi/article/details/39856081
随机推荐
- CAS如何解决ABA问题
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. CAS如何解决ABA问题 什么是ABA:在CAS过程中,线程1.线程2分 ...
- B08. BootstrapBlazor实战 Menu 导航菜单使用(2)
接上篇: B08. BootstrapBlazor实战 Menu 导航菜单使用(1) 3.项目模板 节省时间,直接使用 Bootstrap Blazor App 模板快速搭建项目 传送门: https ...
- Infrastructure 知识: dnf对module的处理
引言 从RHEL8/CentOS8开始,dnf取代yum作为rpm 包管理工具.与之而来的还有模块(module)这个东西. 有了它们的加持,让在同一个OS上安装不同版本的软件或者开发语言的工作比之前 ...
- SmartIDE v0.1.16 已经发布 - 支持阿里&蚂蚁开源的国产 IDE OpenSumi
SmartIDE v0.1.16 (Build 3137) 已经在2022年4月19日发布到稳定版通道,我们在这个版本中增加了阿里和蚂蚁发布的国产IDE OpenSumi的支持,以及其他一些改进.Sm ...
- 你不知道的 Linux 使用技巧
开源Linux 一个执着于技术的公众号 1.快速跳转命令 - z 要是每次都要进入一个目录很深的文件夹下,像下面这样: # cd /root/py/auto/fabric 每次都要输入好多个目录名是不 ...
- Linux系统句柄优化
Linux系统句柄介绍 文件句柄,会随着进程数增加而增加.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024.在生产环境中很容易到达这个值,因此这里就会成为系统的瓶颈. 在Linux ...
- MySQL 的 EXPLAIN 语句及用法
在MySQL中 DESCRIBE 和 EXPLAIN 语句是相同的意思.DESCRIBE 语句多用于获取表结构,而 EXPLAIN 语句用于获取查询执行计划(用于解释MySQL如何执行查询语句). 通 ...
- Fluent-Validator 业务校验器
Fluent-Validator 业务校验器 背景 在互联网行业中,基于Java开发的业务类系统,不管是服务端还是客户端,业务逻辑代码的更新往往是非常频繁的,这源于功能的快速迭代特性.在一般公司内部, ...
- js颜色调试器
1 /* ColorTestViewer 颜色调试器 2 3 attribute: 4 onchange: Function; //颜色改变回调; 默认null 5 6 //以下属性不建议直接修改 7 ...
- 『忘了再学』Shell基础 — 29、AWK内置变量
目录 1.AWK内置变量 2.练习说明 (1)$n变量练习 (2)FS变量练习 (3)NF变量和NR变量练习 3.总结: 1.AWK内置变量 AWK内置变量如下表: awk内置变量 作用 $0 代表目 ...