Push Rules

原文:https://docs.gitlab.com/ee/push_rules/push_rules.html

Push Rules

通过使用正则表达式拒绝基于提交内容,分支名称或文件详细信息的推送,来获得对哪些内容可以推送或不能推送到存储库的额外控制.

Overview

GitLab 已经提供了受保护的分支 ,但是在某些情况下,您需要一些特定的规则,例如,防止删除 Git 标签或对提交消息强制采用特殊格式.

推送规则本质上是预先接收的 Git 挂钩 ,可在用户友好的界面中轻松启用. 如果您是管理员或每个项目,它们是全局定义的,因此您可以根据需要将不同的规则应用于不同的项目.

Use cases

每个推送规则都可以有自己的用例,但让我们考虑一些示例.

Commit messages with a specific reference

假设您对工作流程有以下要求:

  • 每个提交都应引用 Jira 问题,例如: Refactored css. Fixes JIRA-123. Refactored css. Fixes JIRA-123.
  • 用户应该无法使用git push删除 Git 标签

您需要做的就是编写一个简单的正则表达式,要求在提交消息中提及一个 Jira 问题,例如JIRA\-\d+ .

现在,当用户尝试通过消息Bugfix推送提交时,他们的推送将被拒绝. 仅接受Bugfix according to JIRA-123推送带有Bugfix according to JIRA-123消息的提交.

Restrict branch names

假设您公司中有严格的分支机构名称政策,并且您希望分支机构以特定名称开头,因为您有不同的 GitLab CI / CD 作业( featurehotfixdockerandroid等)依赖于分支机构名称.

但是,您的开发人员并不总是记住该策略,因此他们可能会推送到各个分支,并且 CI 管道可能无法按预期工作. 通过在推送规则中全局限制分支名称,可以防止此类错误. 与您的推送规则不匹配的任何分支名称都将被拒绝.

请注意,不管指定的分支命名正则表达式(regex)如何,始终允许使用默认分支的名称. 通过这种方式配置 GitLab,因为合并通常将默认分支作为目标. 如果您还有其他目标分支,请将其包含在正则表达式中. (请参阅启用推送规则 ).

默认分支还默认为受保护分支 ,这已经限制了用户直接推送.

Custom Push Rules

通过使用更高级的服务器挂钩,可以创建自定义推送规则,而不是” 管理区域”>”推送规则”中可用的推送规则 .

有关更多信息,请参见服务器挂钩 .

Enabling push rules

注意: GitLab 管理员可以在” 管理区域”>”所有新项目都将继承的推送规则”下全局设置推送规则. 您以后可以在项目的设置中覆盖它们. 也可以在组级别上设置它们.

  1. 导航到项目的“设置”>”存储库”,然后展开” 推送规则”
  2. 设置所需的规则
  3. 单击” 保存推送规则”以使更改生效

以下选项可用.

推送规则 GitLab 版本 Description
git push删除标签 Starter 7.10 禁止用户使用git push删除 Git 标签. 仍然可以通过 Web UI 删除标签.
检查作者是否是 GitLab 用户 Starter 7.10 限制作者(电子邮件)对现有 GitLab 用户的提交.
提交者限制 Premium 10.2 GitLab will reject any commit that was not committed by the current authenticated user
检查提交是否通过 GPG 签名 Premium 10.1 如果未通过 GPG 签名,则拒绝提交. 使用 GPG阅读签名提交 .
防止向 Git 提交机密 Starter 8.12 GitLab 将拒绝任何可能包含机密的文件. 阅读禁止使用的文件 .
通过提交消息限制 Starter 7.10 只允许推送与此正则表达式匹配的提交消息. 保留为空以允许任何提交消息. 使用多行模式,可以使用(?-m)禁用该模式.
受提交消息限制(负匹配) Starter 11.1 只允许提交与此正则表达式不匹配的提交消息. 保留为空以允许任何提交消息. 使用多行模式,可以使用(?-m)禁用该模式.
受分支名称限制 Starter 9.3 只允许推送与此正则表达式匹配的分支名称. 保留为空以允许使用任何分支名称.
通过提交作者的电子邮件进行限制 Starter 7.10 只允许推送与此正则表达式匹配的提交者的电子邮件. 留空以允许任何电子邮件.
禁止的文件名 Starter 7.10 与该正则表达式匹配的所有提交的文件名均不允许推送. 保留为空以允许任何文件名.
最大档案大小 Starter 7.12 包含超过此文件大小(以 MB 为单位)的添加或更新文件的推送将被拒绝. 设置为 0 允许任何大小的文件. 由 Git LFS 跟踪的文件被豁免.

提示: GitLab 对推送规则中的正则表达式使用RE2 语法 ,您可以在GoLang regex tester 上对其进行测试 .

Prevent pushing secrets to the repository

Introduced in GitLab Starter 8.12.

诸如凭证文件,SSH 私钥之类的机密以及其他包含机密的文件绝不应提交给源代码控制. GitLab 允许您打开文件的预定义拒绝列表,该列表将不允许被推送到存储库,从而阻止这些提交到达远程存储库.

通过选中防止向 Git 提交机密复选框,当文件与从files_denylist.yml读取的正则表达式匹配时,GitLab 会阻止将其推送到存储库(在查看此文件时,请确保您处于与 GitLab 版本相同的正确分支).

注意:已经提交的文件将不受此推送规则的限制.

下面是这些正则表达式将拒绝的内容的示例列表:

  1. #####################
  2. # AWS CLI credential blobs
  3. #####################
  4. .aws/credentials
  5. aws/credentials
  6. homefolder/aws/credentials
  7. #####################
  8. # Private RSA SSH keys
  9. #####################
  10. /ssh/id_rsa
  11. /.ssh/personal_rsa
  12. /config/server_rsa
  13. id_rsa
  14. .id_rsa
  15. #####################
  16. # Private DSA SSH keys
  17. #####################
  18. /ssh/id_dsa
  19. /.ssh/personal_dsa
  20. /config/server_dsa
  21. id_dsa
  22. .id_dsa
  23. #####################
  24. # Private ed25519 SSH keys
  25. #####################
  26. /ssh/id_ed25519
  27. /.ssh/personal_ed25519
  28. /config/server_ed25519
  29. id_ed25519
  30. .id_ed25519
  31. #####################
  32. # Private ECDSA SSH keys
  33. #####################
  34. /ssh/id_ecdsa
  35. /.ssh/personal_ecdsa
  36. /config/server_ecdsa
  37. id_ecdsa
  38. .id_ecdsa
  39. #####################
  40. # Any file with .pem or .key extensions
  41. #####################
  42. *.pem
  43. *.key
  44. #####################
  45. # Any file ending with _history or .history extension
  46. #####################
  47. pry.history
  48. bash_history