Git挂钩是一种有助于使您的存储库保持秩序的工具。您可以设置自动规则来处理提交。
大家可能都知道预提交 -在提交之前检查代码。但并不是在提交之前可以检查所有内容。某些限制要在整个Gitlab中全局使用。
对于任何对预提交和预接收挂钩感到困惑的人,这篇文章在“什么是git挂钩?”中描述了它们之间的区别。
如果您拥有Gitlab Enterprise Edition,则可以通过WEB界面配置帖子中描述的挂钩。
但是,如果您拥有Gitlab社区(核心)版怎么办?
本文将介绍在Gitlab社区(核心)版服务器上运行的5个预接收挂钩:
- block_confidentials.sh-阻止发送私钥和AWS令牌
- block_file_extensions.sh-阻止发送存档(可配置正则表达式)
- check-large-files.sh-阻止发送大文件(大小可配置)
- reject-not-allowlist-email.sh-阻止不在允许列表中的电子邮件提交(电子邮件域的列表是可配置的)
- require-issue.sh-阻止提交而标题中没有问题(问题列表是可配置的)
大多数挂钩都来自pre-receive-hooks目录中的platform-samples存储库(适用于GitHub Enterprise)。
您可以在Github上查看服务器挂钩的所有源代码。
在Gitlab上安装
- 您需要创建一个目录
/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
- 将钩子复制到此目录
- 不要忘记为挂钩设置启动权限(chmod + x挂钩文件)
阻止发送私钥和AWS令牌
block_confidentials.sh regex_list, .
# Define list of REGEX to be searched and blocked
regex_list=(
# block any private key file
'(\-){5}BEGIN\s?(RSA|OPENSSH|DSA|EC|PGP)?\s?PRIVATE KEY\s?(BLOCK)?(\-){5}.*'
# block AWS API Keys
'AKIA[0-9A-Z]{16}'
# block AWS Secret Access Key (TODO: adjust to not find validd Git SHA1s; false positives)
# '([^A-Za-z0-9/+=])?([A-Za-z0-9/+=]{40})([^A-Za-z0-9/+=])?'
# block confidential content
'CONFIDENTIAL'
)
, git push
.
block_file_extensions.sh case *.zip|*.gz|*.tgz
, , .
zip , git push
.
check-large-files.sh maxsize
, , .
1 , git push
.
email allow
reject-not-allowlist-email.sh email-, .
declare -a DOMAIN_ARRAY=("group1.com" "group2.com")
git , .
git config user.email user1@group3.com
, git push
.
issue
require-issue.sh commit_format, .
commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"
, , commit_format git push
.
.
Telegram- Gitlab