简述
极狐 GitLab 中的推送规定(Push Rules)是一种强制执行代码仓库标准和最佳实际的办法。推送规定解决了以下场景的痛点:
- 第三方需要管理工具集成:比方与 Jira 集成须要开发者提交代码时的 commit message 中携带
JIRA-ID
,通过推送规定的正则束缚,能够无效的防止家养 commit 的存在,确保 commit 都是可追踪到 Jira 原始需要的。 - 代码品质和格调一致性:推送规定能够确保团队成员在提交代码时遵循对立的代码格调和质量标准。例如,您能够设置规定来要求提交信息遵循特定的格局,或者禁止提交蕴含某些关键字的代码。这有助于进步代码品质和可读性,升高保护老本。
- 避免敏感信息泄露:推送规定能够帮忙您避免团队成员不小心将敏感信息(如明码、密钥等)提交到代码仓库。您能够设置规定来查看提交的内容,如果发现蕴含敏感信息,将阻止提交操作。这有助于爱护我的项目的安全性。
- 确保分支策略:推送规定能够帮忙您施行团队的分支策略。例如,您能够设置规定来限度只有特定用户或用户组能力向受爱护的分支提交代码。这有助于确保我的项目的要害分支保持稳定和洁净,便于管理和保护。
- 用户信息校验:对提交的用户进行多维度校验,防止不存在的用户推送代码到极狐 GitLab 中
详述
反对的配置层级
实例级
您能够为所有要继承的新我的项目创立推送规定,但能够在我的项目级别或群组级别笼罩它们。配置全局推送规定后创立的所有我的项目都继承此配置。然而,必须应用笼罩每个我的项目的全局推送规定中形容的过程,手动更新每个现有我的项目。
实例级推送规定设置仅针对私有化部署场景,且配置人员须要管理员权限,配置办法:
- 在顶部栏上,抉择 主菜单 > 管理员。
- 在左侧边栏上,抉择 推送规定。
- 开展 推送规定。
- 设置您想要的规定。
- 抉择 保留推送规定。
群组级
群组级配置参数与实例级没有区别,只是配置地位不同。群组级配置位于:
- 在顶部栏上,抉择 主菜单 > 群组 并找到您的群组。
- 在左侧边栏上,抉择 设置 > 仓库。
- 开展 推送规定。
- 设置您想要的规定。
- 抉择 保留推送规定。
我的项目级
我的项目级配置参数与实例级没有区别,只是配置地位不同。我的项目级配置位于:
- 在顶部栏上,抉择 主菜单 > 我的项目 并找到您的我的项目。
- 在左侧边栏上,抉择 设置 > 仓库。
- 开展 推送规定。
- 设置您想要的规定。
- 抉择 保留推送规定。
推送规定详解
验证用户
- 回绝未经验证的用户:用户必须有一个已确认的电子邮件地址。
- 提交作者的电子邮件:作者和提交者的电子邮件地址都必须与正则表达式匹配。要容许任何电子邮件地址,请留空。
- 查看提交作者是否是 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$
- 分支的长度必须在
4
到15
个字符之间,只承受小写字母、数字和破折号。 ^[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 跟踪的文件被豁免。