gerrit系统如何配置访问控制

.
版本:v0.3
作者:河东西望
日期:2022-7-13
.

gerrit系统的上手使用有两个难点:

想要上手使用gerrit的同仁们,搭建部署好gerrit系统之后,会发现gerrit的权限配置不知道从哪里下手。而默认的权限配置非常简单而且开放,不符合企业各种开发管理的需求场景。

gerrit系统上的官方帮助文档很全面,各种概念都讲解得很细致。但是使用gerrit的方式,每个人可能都有不同的方式。只要研发团队用起来上手简单,操作流畅,每种方式都是可行的。

在AOSP的项目开发中,gerrit的使用方式有多种:

本文档不讲解gerrit的概念和原理,主要介绍项目实践中访问控制是如何配置使用的。repo仓库的部署搭建可以参看我的其他博文。

使用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的权限授予给群组。(也不好理解?!往下看)

作为企业的开发团队来说,一般的需求场景是这样的:

  • 有多个不同的部门,每个部门不能互相看到其他部门的代码。
  • 所有部门有如下几种角色:开发者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

根据上述的需求场景,我们可以采取如下权限管理策略:

我这里对应创建三个群组:

  • 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

Original: https://www.cnblogs.com/aosp/p/16471067.html
Author: 河东西望
Title: gerrit系统如何配置访问控制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582216/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Shell脚本8种字符串截取方法总结

    Linux 的字符串截取很有用。有八种方法。 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符。 echo …

    Linux 2023年5月28日
    0150
  • 运算符重载和深浅拷贝

    对于某些运算符号(+,-,,/….),我们不满足与它原有的操作方式,而是要在对 特有对象(如负数的加减)进行使用,但是编译器会不允许这样做,因为会与操作符 原本的类型不…

    Linux 2023年6月7日
    099
  • 研发过程中的文档管理与工具

    写文档也是技术活 01:实践 对于多数开发同学来说,很多时候即讨厌没有研发文档,但是自己又不愿意常写文档,痛且倔强着; 程序员该不该写文档,与争论哪种编程语言最好一样,想撕的嘴不留…

    Linux 2023年6月14日
    0122
  • 最小生成树-Kruskal算法

    与 Prim算法贪心选择不同,Kruskal算法采取 每次选择权值最小的边的方法,这样,在 不构成环且最后能够连接完所有边它们的权重和一定是最小的。 和之前Prim算法的图一样,便…

    Linux 2023年6月7日
    0119
  • Linux Ubuntu 添加新用户

    1. 了解配置文件 Linux下与用户信息相关的配置文件有 /etc/passwd、 /etc/group、 /etc/shadow等,其权限分别如下: /etc/passwd:保…

    Linux 2023年5月27日
    0140
  • 什么是守护进程?

    在了解守护进程之前,需要先知道什么是什么是终端?什么是作业?什么是进程组?什么是会话? 在 Linux 中, 每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都…

    Linux 2023年6月8日
    0123
  • Spring5新特性—Log4j2

    Spring5新特性—Log4j2 Spring5新特性—Log4j2 创建一个Maven项目,导入依赖 org.apache.logging.log4j log4j-core 2…

    Linux 2023年6月14日
    092
  • /dev/null文件的作用以及使用方法

    关于/dev/null,以及如何使用它 今天在看MIT的一个课程时,老师给的程序实例中有一个地方没弄明白: #!/bin/bash echo "Starting prog…

    Linux 2023年6月6日
    0111
  • 循环通过逗号分隔的shell变量

    假设我有一个Unix shell变量,如下所示 variable=abc,def,ghij 我想使用for循环提取所有值(abc,def和ghij),并将每个值传递给一个过程。 脚…

    Linux 2023年5月28日
    089
  • CentOS 用户与群组

    Linux 系统中存在一个超级用户 root ,可以做任何操作。Linux 系统中每个用户都有自己独立的账户,有些命令运行需要切换 root 身份,用户是分组的。 1.1、切换用户…

    Linux 2023年6月8日
    092
  • Python的偏函数(Partial Function Application)

    这个概念说实话以前听过,但没深究过,也没用到过…但是被人问到了,就查来记录一下。 查下资料,发现这个东西说白了就是:部分参数有默认值的函数,Orz。再回过头来看他的英文…

    Linux 2023年6月8日
    0101
  • Linux下的SELINUX

    理解Linux下的SELinux 长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通过 setenforce 0命令禁用SELinux,来减少产生的权限问题,但是这并不是…

    Linux 2023年6月7日
    092
  • Dockerfile 构建镜像

    从 Dockerfile 构建镜像涉及三个步骤 创建工作目录 编写 Dockerfile 规格 使用 docker build 命令构建镜像 1. 创建工作目录 这个根据应用实际情…

    Linux 2023年6月6日
    0111
  • SQL实战——03. 查找各个部门当前(to_date=’9999-01-01′)领导当前薪水详情以及其对应部门编号dept_no

    查找各个部门当前(to_date=’9999-01-01′)领导当前薪水详情以及其对应部门编号dept_noCREATE TABLE dept_manage…

    Linux 2023年6月14日
    0105
  • ip、ifconfig 和 route命令介绍与网络配置

    linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中…

    Linux 2023年6月6日
    097
  • 001 研发同学必学哪些 Linux 命令?

    身为研发同学,Linux 是绕不过去的一个小山包,不是说要掌握的十分精通,在程序员界里做个极客,也不是说要抢了 Devops 同学的饭碗,但至少要做到摆脱对 Linux 命令认知的…

    Linux 2023年5月27日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球