首页 > 其他分享 >细粒度的代码权限怎么做?极狐GitLab 代码所有者来帮忙

细粒度的代码权限怎么做?极狐GitLab 代码所有者来帮忙

时间:2024-02-21 09:02:35浏览次数:41  
标签:文件 Code 细粒度 代码 GitLab 批准 所有者 分支

本文作者:极狐GitLab 资深解决方案架构师 尹学峰

如果基于固定的评审规则每次都是那几个人,当仓库很大的时候,各个模块(文件夹)责任人不同,其他人并不太懂。所以当修改不同的模块时候,基于固定规则就太死板了。而且容易造成「评审行为」的流于形式,因为固定的人可能根本看不懂实际MR变更涉及到的模块代码。最终就导致,评审者直接点了approve按钮,这非常不合适。

简述

极狐GitLab的代码所有者解决了以下场景的痛点:

  1. 代码审查:确保特定代码区域的变更得到相关所有者的审查,提高代码质量。即在合并请求过程中,基于变更文件,动态指定相关代码所有者参与合并请求审批过程,确保代码安全与稳定。

  2. 负责人分配:为关键代码区域指定所有者,明确责任划分,有助于项目管理。

  3. 团队协作:提高团队成员之间的协作效率,减少沟通成本。

图示:承包鱼塘好

详述

代码所有者

代码所有者定义

代码所有者定义谁开发和维护功能,并拥有仓库中生成的文件或目录。

  • 当您浏览目录时,您定义为代码所有者的用户会显示在 UI 中。

图示:文件浏览时的所有者会显示在页面上

  • 您可以设置合并请求,以便在合并前必须得到代码所有者的批准。

图示:Code Owner示例

  • 您可以保护分支并仅允许代码所有者批准对分支的更改。

使用代码所有者、核准人以及批准规则,构建灵活的批准工作流程:

  • 使用 代码所有者,定义对仓库中的特定路径具有领域专业知识的用户。

  • 使用 核准人批准规则 来定义专业领域(例如安全团队),这些领域不限于仓库中的特定文件路径。

  • 核准人定义用户。

  • 批准规则定义这些用户何时可以批准工作,以及是否需要他们的批准。

例如:

类型 名称 范围 说明
批准规则 UX 所有文件 用户体验 (UX) 团队成员评审项目中所有更改的用户体验。
批准规则 Security 所有文件 安全团队成员评审所有更改是否存在漏洞。
代码所有者批准规则 Frontend: Code Style *.css 文件 前端工程师检查 CSS 文件更改是否符合项目样式标准。
代码所有者批准规则 Backend: Code Review *.rb 文件 后端工程师评审 Ruby 文件的逻辑和代码风格。

创建一个 CODEOWNERS 文件,指定负责仓库中特定文件和目录的用户或共享群组。每个仓库都可以有一个CODEOWNERS 文件。创建步骤:

  1. 选择要指定代码所有者的位置:
  • 在仓库的根目录中

  • .gitlab/ 目录中

  • docs/ 目录中

  1. 在那个位置,创建一个名为 CODEOWNERS 的文件。

  2. 在文件中,输入遵循以下模式之一的文本:

# Code Owners for a file
filename @username1 @username2

# Code Owners for a directory
directoryname/ @username1 @username2

# All group members as Code Owners for a file
filename @groupname

# All group members as Code Owners for a directory
directoryname/ @groupname

受保护分支的代码所有者控制

对于受保护的分支,您可以要求至少获得代码所有者的一项批准。

要保护新分支并启用代码所有者的批准:

  1. 转到您的项目并选择 设置 > 仓库

  2. 展开 受保护的分支

  3. 分支 下拉菜单中,选择要保护的分支。

  4. 允许推送允许合并 列表中,选择您想要的设置。

  5. 打开 需要代码所有者的批准 开关。

  6. 选择 保护

要在已受保护的分支上启用代码所有者的批准:

  1. 转到您的项目并选择 设置 > 仓库

  2. 展开 受保护的分支

  3. 在受保护分支列表中,打开分支旁边的 需要代码所有者批准 开关。

启用后,这些分支的所有合并请求都需要每个匹配规则的代码所有者批准,然后才能合并。 此外,如果匹配规则,则拒绝直接推送到受保护分支。

任何未在 CODEOWNERS 文件中指定的用户都不能推送指定文件或路径的更改,除非他们被特别允许。 您不必限制开发人员直接推送到受保护的分支。相反,您可以限制推送到某些需要代码所有者审核的文件。

当所有者设置为群组时的人数控制

当设置群组为代码所有人时,可以通过设置所有符合条件的用户的要求审批数目来实现人数控制。配置方式参考:


图示:群组责任人的人数控制

标签:文件,Code,细粒度,代码,GitLab,批准,所有者,分支
From: https://www.cnblogs.com/jihugitlab/p/18024415

相关文章

  • C++多线程 第八章 设计并发代码
    第八章设计并发代码数据划分工作在处理开始前在线程间划分数据方面,C++与MPI或OpenMP的方式较为相似.一个任务被分成一个并行任务集,工作的线程独立运行这些任务.并且在最后的化简步骤中合并这些结果.尽管这种方法是很有效的,但是只有在数据可以实现划分时,才可如此.考虑这......
  • 代码随想录 day56 最长递增子序列 最长连续递增序列 最长重复子数组
    最长递增子序列dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度状态转移方程的含义:位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列+1的最大值。最长连续递增序列dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]。如果nums[i]>nums[i-1......
  • 【Go-Lua】Golang嵌入Lua代码——gopher-lua
    嵌入式8篇文章0订阅订阅专栏Lua代码嵌入GolangGo版本:1.19首先是Go语言直接调用Lua程序,并打印,把环境跑通packagemainimportlua"github.com/yuin/gopher-lua"funcmain(){ L:=lua.NewState() deferL.Close() //go err:=L.DoString(`print("gogogo!")`) iferr!=n......
  • 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉
    669.修剪二叉搜索树 题目链接:669.修剪二叉搜索树-力扣(LeetCode)思路:本题原来想沿用上一次最后一道题的思路,用删除二叉搜索树特定值节点的方法来解决,但是会报错,找不出问题所在(在评论区也是一堆套用450代码报错的)。只能参考官网答案了。官网的方法没有用delete,但是思想是一直......
  • go自定义了一个Code的错误代码类型
    第一次基于GoFrame框架开发项目,这是一个灵感来自PHPLaravel的Golang开发框架,使用之后其实自己并不是很喜欢,把一个开发语言的习惯直接迁移到另一个开发语言上,个人觉得并不是一个好主意,不过这次并不想讨论这个。同事之前的实践异常处理是每个框架都需要考虑的问题,GoFrame也有自己......
  • spark编写WordCount代码(scala)
    代码demopackagecom.spark.wordcountimportorg.apache.spark.SparkContextimportorg.apache.spark.SparkContext._importorg.apache.spark.SparkConfobjectWordCount{defmain(args:Array[String]){//文件位置valinputFile="hdfs://192.168.10......
  • 给 PyQt5 注册页,添加注册逻辑代码,实现用户的注册验证
    使用PyQt5(PySide2)+SQLAlchemy做一个登录注册页(五)本文将介绍自己用PyQt5+SQLAlchemy做的一个登录注册页,使用邮箱接收验证码,本文介绍是前后端未分离的实现方式,后续将出一个前后端分离的,你可以将PyQt5改为PySide2以获得更宽松的开源协议本文由于涉及到的代码较多,将会是一......
  • 提交代码注释率是什么?
    提交代码注释率通常是指在开发人员提交的代码中,注释行数占总代码行数的比例。这是一个衡量代码质量、可读性以及团队规范的重要指标之一。注释不仅应该包括函数或方法的目的和用法,还应涵盖复杂逻辑、异常处理、设计决策等关键信息。理想的注释率为多少并没有统一的标准,但一般来......
  • 代码随想录算法训练营第二十三天 | 538.把二叉搜索树转换为累加树, 108.将有序数组转
     669.修剪二叉搜索树 已解答中等 相关标签相关企业 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树 不应该 改变保留在树中的元素的相对结构(即,如果......
  • Go语言精进之路读书笔记第30条——使用接口提高代码的可测试性
    Go语言有一个惯例是让单元测试代码时刻伴随着你编写的Go代码。单元测试是自包含和自运行的,运行时一般不会依赖外部资源(如外部数据库、外部邮件服务器等),并具备跨环境的可重复性(既可在开发人员的本地运行,也可以在持续集成的环境中运行)。30.1实现一个附加免责声明的电子邮件发送函......