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 ! Tout d’abord… Que sont les crochets ? 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 . Les utilisateurs peuvent également le configurer à l'aide de la variable de configuration . $GIT_DIR/hooks 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. répertoire de votre référentiel Git 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 .git/hooks Création de nos tout premiers Git Hooks ! 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 et initialisez un nouveau référentiel git à l'intérieur. git_hooks_tut ~/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 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 .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 exécutable. Les scripts non exécutables sont ignorés par git même s'ils sont présents dans le répertoire hooks. commit-msg ~/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 ! Quels sont les différents types de crochets disponibles ? Git nous permet de créer des hooks pour un certain nombre de points d'exécution. Certains d'entre eux sont les suivants - 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é-commit : 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. Hook de pré-réception : 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. Post-Receive Hook : 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. Crochet de pré-poussée : 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. Hook Prepare-Commit-Msg : 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.