Les hooks Git sont un outil pour vous aider à garder votre référentiel en ordre. Vous pouvez configurer des règles automatiques pour le traitement de vos validations.
Vous connaissez probablement tous le pré-commit - vérifier votre code avant de vous engager. Mais tout ne peut pas être vérifié avant de s'engager. Certaines restrictions veulent être utilisées globalement dans Gitlab.
Pour toute personne confuse au sujet des hooks de pré-validation et de pré-réception, cet article décrit les différences entre eux dans la section "Que sont les hooks git?"
Si vous avez Gitlab Enterprise Edition, vous pouvez configurer les hooks décrits dans l'article via l'interface WEB.
Mais que faire si vous avez Gitlab Community (Core) Edition?
Cet article décrit 5 hooks de pré-réception qui s'exécutent sur le serveur Gitlab Community (Core) Edition:
- block_confidentials.sh - Blocage de l'envoi de clés privées et de jetons AWS
- block_file_extensions.sh - Blocage d'envoi d'archives (Regex configurable)
- check-large-files.sh - Blocage de l'envoi de fichiers volumineux (taille configurable)
- rejeter-not-allowlist-email.sh - Blocage des commits avec des e-mails ne figurant pas dans la liste d'autorisation (la liste des domaines d'e-mail est configurable)
- require-issue.sh - Blocage des commits sans problème dans le titre (la liste des problèmes est configurable)
La plupart des hooks sont extraits du référentiel des exemples de plate-forme dans le répertoire pre-receive-hooks (s'applique à GitHub Enterprise).
Vous pouvez consulter tout le code source des hooks de serveur sur Github .
Installation sur Gitlab
- Vous devez créer un répertoire
/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
- Copier les hooks dans ce répertoire
- N'oubliez pas de définir les droits de lancement pour les hooks (chmod + x hook file)
Bloquer l'envoi de clés privées et de jetons 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