简述

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

  1. 第三方需求管理工具集成:比如与Jira集成需求开发者提交代码时的commit message中带着JIRA-ID,通过推送规矩的正则约束,能够有用的避免野生commit的存在,保证commit都是可追踪到Jira原始需求的。
  2. 代码质量和风格一致性:推送规矩能够保证团队成员在提交代码时遵从统一的代码风格和质量规范。例如,您能够设置规矩来要求提交信息遵从特定的格局,或者制止提交包括某些要害字的代码。这有助于进步代码质量和可读性,下降保护成本。
  3. 避免灵敏信息走漏:推送规矩能够帮助您避免团队成员不小心将灵敏信息(如暗码、密钥等)提交到代码库房。您能够设置规矩来查看提交的内容,假如发现包括灵敏信息,将阻挠提交操作。这有助于保护项目的安全性。
  4. 保证分支战略:推送规矩能够帮助您实施团队的分支战略。例如,您能够设置规矩来约束只要特定用户或用户组才能向受保护的分支提交代码。这有助于保证项目的要害分支保持稳定和干净,便于管理和保护。
  5. 用户信息校验:对提交的用户进行多维度校验,避免不存在的用户推送代码到极狐GitLab中

怎么运用极狐GitLab 代码推送规矩,进步代码质量?
怎么运用极狐GitLab 代码推送规矩,进步代码质量?
怎么运用极狐GitLab 代码推送规矩,进步代码质量?

胪陈

支撑的装备层级

实例级

您能够为一切要承继的新项目创立推送规矩,但能够在项目等级或群组等级掩盖它们。 装备大局推送规矩后创立的一切项目都承继此装备。可是,有必要运用掩盖每个项目的大局推送规矩中描绘的进程,手动更新每个现有项目。

实例级推送规矩设置仅针对私有化部署场景,且装备人员需求管理员权限,装备办法:

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

怎么运用极狐GitLab 代码推送规矩,进步代码质量?

群组级

群组级装备参数与实例级没有差异,仅仅装备方位不同。群组级装备坐落:

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

项目级

项目级装备参数与实例级没有差异,仅仅装备方位不同。项目级装备坐落:

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

推送规矩详解

验证用户

  • 拒绝未经验证的用户:用户有必要有一个已承认的电子邮件地址。
  • 提交作者的电子邮件:作者和提交者的电子邮件地址都有必要与正则表达式匹配。要答应任何电子邮件地址,请留空。
  • 查看提交作者是否是 GitLab 用户:提交作者和提交者有必要具有通过极狐GitLab 验证的电子邮件地址。假如敞开此选项,当用户的ssh公钥中包括的邮箱地址,如some@email.com并非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 'some@email.com'. 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 'git@192.168.20.9: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 盯梢的文件被豁免。