DevOps est devenu un élément essentiel du monde du développement de logiciels pour les entreprises qui tentent de simplifier leurs processus de développement et de déploiement. Parmi les nombreuses technologies DevOps disponibles, il en est une qui est parfois négligée et pourtant pourtant très efficace.
Cette technologie vitale n’est autre que « Git Hooks » . »
Les Git Hooks sont d'excellents outils pour automatiser les tâches, appliquer les normes de codage, effectuer des déploiements continus et exécuter des tests.
Voyons comment nous pouvons utiliser Git Hooks pour révolutionner nos pratiques DevOps !
Regardons d'abord la définition officielle -
Les hooks sont des programmes que vous pouvez placer dans un répertoire hooks pour déclencher des actions à certains moments de l'exécution de git.
Heureusement, c’est une définition très simple !
Essayons de répondre à certaines des questions que les lecteurs pourraient se poser sur la définition.
Q) Qu'est-ce qu'un répertoire Hooks ? Où est-il situé?
Un répertoire hooks est un répertoire dans un référentiel Git qui contient des programmes exécutables ou des Hooks que Git exécutera. Par défaut, le répertoire des hooks est $GIT_DIR/hooks
. Les utilisateurs peuvent également le configurer à l'aide de la variable de configuration core.hooksPath
.
Q) Quels sont les points d'exécution de Git ?
Les points d'exécution Git sont des étapes du workflow Git au cours desquelles les hooks peuvent être exécutés. Pre-commit, Post-commit, Pre-push, Post-receive, Pre-rebase et Post-merge sont quelques exemples de points d'exécution de Git.
Pour résumer cette section, nous pouvons avoir la définition suivante pour Git Hooks :
Git exécute des scripts appelés « hooks » avant ou après des opérations particulières telles que la validation, le transfert ou la fusion de code. Ils vous permettent d'automatiser des tâches, d'appliquer des politiques et d'interagir avec la base de code pendant le processus de développement. Les hooks Git sont stockés dans le répertoire
.git/hooks
de votre référentiel Git
Essayons de créer un hook Git simple qui imposerait l'expression régulière "TASK*" sur n'importe quel message de validation.
Créez un nouveau répertoire git_hooks_tut
et initialisez un nouveau référentiel git à l'intérieur.
~/projects$ mkdir git_hooks_tut ~/projects$ cd git_hooks_tut ~/projects/git_hooks_tut$ git init Initialized empty Git repository
Allons dans le répertoire hooks et étudions son contenu.
~/projects/git_hooks_tut$ cd .git/hooks ~/projects/git_hooks_tut/.git/hooks$ ls applypatch-msg.sample pre-applypatch.sample pre-push.sample commit-msg.sample pre-commit.sample pre-rebase.sample fsmonitor-watchman.sample pre-merge-commit.sample pre-receive.sample post-update.sample prepare-commit-msg.sample update.sample
Le répertoire hooks est livré avec quelques exemples de scripts. L'extension .sample
les empêche de s'exécuter par défaut. Tout ce que vous devez faire pour "installer" un hook est de vous débarrasser de l'extension .sample
.
Ou, si vous partez de zéro avec un nouveau script, vous pouvez simplement ajouter un nouveau fichier avec un nom qui correspond à l'un des noms de fichiers répertoriés ci-dessus, mais sans l'extension .sample
.
Pour notre cas d’utilisation, nous aurons besoin d’un hook commit-msg. Allez-y et créez un nouveau script nommé commit-msg
.
~/projects/git_hooks_tut/.git/hooks$ touch commit-msg
Ajoutons la logique pour garantir notre modèle de message de validation au script commit-msg
.
#!/bin/sh commit_msg_file=$1 commit_msg=$(cat "$commit_msg_file") # Check if the commit message starts with "TASK" if ! echo "$commit_msg" | grep -q "^TASK"; then echo "Commit message must start with 'TASK'" exit 1 fi
Enfin, rendez le script commit-msg
exécutable. Les scripts non exécutables sont ignorés par git même s'ils sont présents dans le répertoire hooks.
~/projects/git_hooks_tut/.git/hooks$ chmod +x commit-msg
Et avec cette configuration, nos crochets sont terminés ! Testons-le maintenant.
Nous allons maintenant créer un nouveau fichier et essayer de le valider ; d'abord avec un format de message non valide, puis avec un format de message valide.
~/projects/git_hooks_tut/.git/hooks$ cd ../.. ~/projects/git_hooks_tut$ touch README ~/projects/git_hooks_tut$ ls README ~/projects/git_hooks_tut$ git add README ~/projects/git_hooks_tut$ git commit -m "Added Readme File" Commit message must start with 'TASK' ~/projects/git_hooks_tut$ git commit -m "TASK-0000: Added Readme File" [master (root-commit) 7f3648a] TASK-000: Added Readme File
Les choses fonctionnent idéalement !
Git nous permet de créer des hooks pour un certain nombre de points d'exécution. Certains d'entre eux sont les suivants -
Hook de pré-commit : ce hook est exécuté avant la création d’un commit. Cela nous permet de valider les changements qui sont engagés.
Hook de pré-réception : le hook de pré-réception est exécuté sur le référentiel distant avant que toute référence ne soit modifiée, vous permettant d'appliquer des règles ou des politiques personnalisées.
Post-Receive Hook : Ce hook est également exécuté sur le référentiel distant après la mise à jour des références. Il peut être utilisé pour envoyer des notifications et/ou effectuer des tâches supplémentaires.
Crochet de pré-poussée : ce crochet est exécuté avant qu'une poussée ne soit effectuée. Cela peut être utilisé pour appliquer certaines politiques qui découragent la poussée de certains types de validations.
Hook Prepare-Commit-Msg : le hook prepare-commit-msg est exécuté après la création d'un message de validation, vous permettant de modifier ou d'améliorer le message de validation.
Il existe divers autres hooks pour mieux personnaliser Git, ils peuvent être trouvés sur la documentation Git .
Les hooks Git, s’ils sont utilisés correctement, sont un outil au grand potentiel ! Nous, les développeurs, sapons souvent la force de tels outils qui pourraient résoudre de nombreuses tâches complexes.
L'utilisation de Git Hooks améliore DevOps à tous les niveaux pourrait être un excellent moyen pour les organisations cherchant à intégrer DevOps dans leurs cycles de développement.
Félicitations pour être arrivé jusqu'ici ! J'espère que vous avez appris quelque chose de nouveau aujourd'hui.