首页 > 其他分享 >如何使用极狐GitLab 代码推送规则,提高代码质量?

如何使用极狐GitLab 代码推送规则,提高代码质量?

时间:2024-02-21 17:25:00浏览次数:32  
标签:代码 GitLab 极狐 ssh 提交 规则 推送 id

简述

极狐 GitLab 中的推送规则(Push Rules)是一种强制执行代码仓库规范和最佳实践的方法。推送规则解决了以下场景的痛点

  1. 第三方需求管理工具集成:比如与Jira集成需要开发者提交代码时的commit message中携带JIRA-ID,通过推送规则的正则约束,可以有效的避免野生commit的存在,确保commit都是可追踪到Jira原始需求的。
  2. 代码质量和风格一致性:推送规则可以确保团队成员在提交代码时遵循统一的代码风格和质量标准。例如,您可以设置规则来要求提交信息遵循特定的格式,或者禁止提交包含某些关键字的代码。这有助于提高代码质量和可读性,降低维护成本。
  3. 防止敏感信息泄露:推送规则可以帮助您防止团队成员不小心将敏感信息(如密码、密钥等)提交到代码仓库。您可以设置规则来检查提交的内容,如果发现包含敏感信息,将阻止提交操作。这有助于保护项目的安全性。
  4. 确保分支策略:推送规则可以帮助您实施团队的分支策略。例如,您可以设置规则来限制只有特定用户或用户组才能向受保护的分支提交代码。这有助于确保项目的关键分支保持稳定和干净,便于管理和维护。
  5. 用户信息校验:对提交的用户进行多维度校验,避免不存在的用户推送代码到极狐GitLab中


图示:推送规则设置页

图示:分支名(branch name)的约束示例

图示:推送消息(commit message)的约束示例

详述

支持的配置层级

实例级

您可以为所有要继承的新项目创建推送规则,但可以在项目级别或群组级别覆盖它们。 配置全局推送规则后创建的所有项目都继承此配置。但是,必须使用覆盖每个项目的全局推送规则中描述的过程,手动更新每个现有项目。

实例级推送规则设置仅针对私有化部署场景,且配置人员需要管理员权限,配置方法:

  1. 在顶部栏上,选择 主菜单 > 管理员
  2. 在左侧边栏上,选择 推送规则
  3. 展开 推送规则
  4. 设置您想要的规则。
  5. 选择 保存推送规则

图示:实例级推送规则配置

群组级

群组级配置参数与实例级没有区别,只是配置位置不同。群组级配置位于:

  1. 在顶部栏上,选择 主菜单 > 群组 并找到您的群组。
  2. 在左侧边栏上,选择 设置 > 仓库
  3. 展开 推送规则
  4. 设置您想要的规则。
  5. 选择 保存推送规则

项目级

项目级配置参数与实例级没有区别,只是配置位置不同。项目级配置位于:

  1. 在顶部栏上,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏上,选择 设置 > 仓库
  3. 展开 推送规则
  4. 设置您想要的规则。
  5. 选择 保存推送规则

推送规则详解

验证用户

  • 拒绝未经验证的用户:用户必须有一个已确认的电子邮件地址。
  • 提交作者的电子邮件:作者和提交者的电子邮件地址都必须与正则表达式匹配。要允许任何电子邮件地址,请留空。
  • 检查提交作者是否是 GitLab 用户:提交作者和提交者必须具有经过极狐GitLab 验证的电子邮件地址。如果开启此选项,当用户的ssh公钥中包含的邮箱地址,如[email protected]并非GitLab用户时,会报错如下:
git.exe push --progress "origin" feature-issue7LEAPESC SYY 0523:feature-issue7LEAPESC SYY 0523

Counting objects: 6,done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4),done.
writing objects: 100% (6/6),537 bytes  537.00 KiB/s, done.Total 6 (delta 4), reused 3 (delta 2)remote: Gitlab: You cannot push commits for '[email protected]'. You can only push commits if the committer email is
one of your own verified emails .
To 192.168.20.9:group esc/project leap/app all leap.git
[remote rejected feature-issue7LEAPESC ABB 0523 -》 feature-isue7LEAPESC ABB 0523 (pre-receive hook declined)
error: failed to push some refs to '[email protected]:group esc/project leap/app all leap.git

git 未能顺利结束 (退出码 1) (2281 ms @ 223/5/24 1:29:19)

如果需要此问题,创建正确的ssh公钥添加到账户中即可。如果不开启此检查,可能会导致很多没有关联(关联行为是基于邮箱地址)到GitLab账户的野生提交存在,而且,仓库统计时,野生提交也不会被算在GitLab用户名下,这个设置就是为了避免这种情况。配置了合适的ssh公钥后,以后就不存在这种问题了。

验证提交消息

  • 在提交消息中的需要表达式:消息必须与表达式匹配。要允许任何提交消息,请留空。使用多行模式,可以使用 (?-m) 禁用。例如,如果每个提交都应该引用 Jira 议题(例如 Refactored css. Fixes JIRA-123.),则正则表达式将是 JIRA-\d+
  • 提交消息中的拒绝表达式:提交消息不能与表达式匹配。要允许任何提交消息,请留空。使用多行模式,可以使用 (?-m) 禁用。

验证分支名称

要验证您的分支名称,请为分支名称输入正则表达式。 要允许任何分支名称,请留空。始终允许您的默认分支。出于安全目的,某些格式的分支名称默认受到限制。禁止使用 40 个十六进制字符的名称,类似于 Git 提交哈希。

一些验证示例如下:

  • 必须以feature或者bugfix开头。
  • (feature|bugfix)/.+
  • 分支必须以 JIRA- 开头。
  • ^JIRA-
  • 分支必须以 -JIRA 结尾。
  • -JIRA$
  • 分支的长度必须在 415 个字符之间,只接受小写字母、数字和破折号。
  • ^[a-z0-9-]{4,15}$

防止意外后果

  • 不允许用户使用 git push 删除 Git 标签:用户不能使用 git push 删除 Git 标签。用户仍然可以通过UI删除标签。

验证文件

  • 防止推送秘钥文件:文件不得包含 secret
  • 绝不能将诸如凭证文件和 SSH 私钥之类的 secret 提交给版本控制系统。在极狐GitLab 中,您可以使用预定义的文件列表来阻止仓库中的这些文件。任何包含与列表匹配的文件的合并请求都将被阻止合并。 已提交到仓库的文件不受此推送规则的限制。 您必须使用覆盖每个项目的全局推送规则中描述的过程,更新现有项目的配置来使用该规则。
  • 下面列出了此规则阻止的文件。有关标准的完整列表,请参阅 files_denylist.yml
  • AWS CLI credential blobs:
  • .aws/credentials
  • aws/credentials
  • homefolder/aws/credentials
  • 私有 RSA SSH 密钥:
  • /ssh/id_rsa
  • /.ssh/personal_rsa
  • /config/server_rsa
  • id_rsa
  • .id_rsa
  • 私有 DSA SSH 密钥:
  • /ssh/id_dsa
  • /.ssh/personal_dsa
  • /config/server_dsa
  • id_dsa
  • .id_dsa
  • 私有 ed25519 SSH 密钥:
  • /ssh/id_ed25519
  • /.ssh/personal_ed25519
  • /config/server_ed25519
  • id_ed25519
  • .id_ed25519
  • 私有 ECDSA SSH 密钥:
  • /ssh/id_ecdsa
  • /.ssh/personal_ecdsa
  • /config/server_ecdsa
  • id_ecdsa
  • .id_ecdsa
  • 任何以这些后缀结尾的文件:
  • *.pem
  • *.key
  • *.history
  • *_history
  • 禁止的文件名:仓库中不存在的文件不得与正则表达式匹配。要允许所有文件名,请留空。请参阅常见示例
  • 在 Git 中,文件名既包括文件名,也包括文件名之前的所有目录。 当您执行 git push 命令时,推送中的每个文件名都会与禁止的文件名中的正则表达式进行比较。
  • 您的禁止的文件名推送规则中的正则表达式可以包含多个要排除的独立匹配项。您可以将文件名广泛匹配到仓库中的任何位置,或仅在某些位置进行限制。文件名匹配也可以是部分的,并按扩展名排除文件类型。
  • 这些示例使用 regex(正则表达式)字符串边界字符来匹配字符串的开头 (^) 和结尾 ($),还包括目录路径或文件名可以包含 ./ 的实例。如果您想在匹配条件中将它们用作普通字符,则必须使用反斜杠 `` 对这两个特殊的正则表达式字符进行转义。
  • 防止将 .exe 文件推送到仓库中的任何位置 - 此正则表达式匹配任何末尾包含 .exe 的文件名:
.exe$
  • 防止在仓库根目录中推送特定的配置文件:
^config.yml$
  • 防止将特定配置文件推送到已知目录:
^directory-name/config.yml$
  • 防止将特定文件推送到仓库中的任何位置,- 此示例测试任何名为 install.exe 的文件。带括号的表达式 (^|/) 匹配目录分隔符后面的文件或仓库根目录中的文件:
(^|/)install.exe$
  • 将所有前面的表达式组合成一个表达式** - 前面的表达式依赖于字符串结尾字符 $。我们可以将每个表达式的该部分移动到匹配条件分组集合的末尾,将其附加到所有匹配项:
(.exe|^config.yml|^directory-name/config.yml|(^|/)install.exe)$
  • 最大文件大小:添加或更新的文件不得超过此文件大小(以 MB 为单位)。要允许任何大小的文件,请设置为 0。Git LFS 跟踪的文件被豁免。

标签:代码,GitLab,极狐,ssh,提交,规则,推送,id
From: https://www.cnblogs.com/jihugitlab/p/18025713

相关文章

  • day38 动态规划part1 代码随想录算法训练营 70. 爬楼梯
    题目:70.爬楼梯我的感悟:居然自己先写出来了!!继续努力!!理解难点:听课笔记:我的代码:classSolution:defclimbStairs(self,n:int)->int:ifn==1:return1dp=[0]*(n+1)dp[1]=1dp[2]=2foriinran......
  • java类初始化及代码块加载顺序连根拔起
    说明相信很多人对于java中父子继承关系中,子类实例化调用过程中,代码块的执行顺序都容易忘记或搞混,尤其是java初级笔试题或面试题最容易出这类题目,让人恨得牙痒痒!!!本文就一次性将其连根铲除,看完你就不会有这个烦恼了,哈哈。先引用一下骨灰级大作《Java编程思想》的复用章节Java......
  • c# 代码操作ftp服务器文件
    好久不见,我又回来了。给大家分享一个最近c#代码操作ftp服务器的代码示例 1publicabstractclassFtpOperation2{3///<summary>4///FTP服务器地址5///</summary>6privatestringftpServer;78///<s......
  • 时间序列异常检测常见方法和代码
    0.介绍时间序列的异常检测是在序列中识别明显偏离正常情况的数据,从而知晓仪器损坏、欺诈活动、系统故障或其他意外事件。我们介绍监督和无监督学习方法探索各种异常检测技术。1.了解异常检测异常通常称为异常值或异常值,是显着偏离数据集中的预期或正常行为的数据点或观察结果......
  • 将SquareLine Studio导出的LVGL代码在windows上运行
    1.引入SDL驱动SquareLineStudio导出的LVGL代码后如果要在windows上运行需要引入SDL的驱动,官方导出的代码是没有的,这里提供一个自己在网上找到的SDL2-2.28.1包,解压后放在同一目录下即可2.编写CmakeLists.txt这里提供我这边自己修改的CmakeLists.txtcmake_minimum_required(......
  • 开发者选择与实施低代码平台的终极指南
    低代码技术的全面兴起,给开发者提供了更多样的开发方式,但挑战也随之而来。本文旨在提供一个全面的指南,帮助开发者有效选择和实施低代码或无代码开发平台。为什么选择低代码平台?不是所有的业务开发都需要低代码平台。如果你的项目满足以下几个典型特征你可以考虑:业务探索中,需求......
  • 代码随想录算法训练营第二十四天 | 77. 组合
    组合已解答中等相关标签相关企业给定两个整数n和k,返回范围[1,n]中所有可能的k个数的组合。你可以按任何顺序返回答案。示例1:输入:n=4,k=2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例2:输入:n=1,k=1输出:[[1]]提示:1<=n<=201<......
  • 代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合
    回溯理论基础 回溯法,与递归有类似形式,本质是穷举(可能存在剪枝),效率并不高。回溯的模板:voidbacktracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){处理节点;......
  • 【性能测试】性能测试工具LoadRunner,参数化关联。全md文档笔记(已分享文档代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • 【深度学习】TensorFlow实现线性回归,代码演示。全md文档笔记(代码文档已分享)
    本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实现简单的神经网络结构,在应用上熟练掌握TensorFlow框架使用,掌握神经网络图像相关案例。具体......