Introduction
Git hook
Les scripts Git hook sont utiles pour identifier des problèmes simples avant la soumission à la revue de code.
Nous exécutons nos hooks sur chaque commit afin de signaler automatiquement les problèmes dans le code tels que les points-virgules manquants, les espaces vides et les instructions de débogage.
En signalant ces problèmes avant la révision du code, cela permet à un réviseur de code de se concentrer sur l'architecture d'un changement sans perdre de temps avec des détails de style insignifiants.
Projet pre-commit
Pre-commit est un outil en ligne de commande qui fait partie de cette gamme d'outils permettant de décaler certains aspects de la sécurité en ajoutant des points de contrôle automatiques après chaque commit.
Cela permet de détecter et de contrôler le plus tôt possible dans le pipeline d'intégration les éventuelles anomalies et donc de les corriger avant la mise en production.
Pour ce faire, trois étapes sont nécessaires :
- Pre-commit nécessite d'être installé sur votre machine.
- Un fichier de configuration nommé “.pre-commit-config.yaml” doit être créé à la racine du projet Git et configuré avec les hooks
- Le projet Git doit être configuré localement pour exécuter automatiquement la commande à chaque commits.
Installer pre-commit
$ pip install pre-commit
Activation pre-commit
Créer un fichier de configuration de pre-commit dans votre dossier git (repository)
Dans l'exemple qui suit, nous allons utiliser pre-commit avec ansible-lint
$ nano .pre-commit-config.yaml
Dans notre fichier, nous allons ajouter la config suivante
--- repos: - repo: https://github.com/ansible/ansible-lint.git rev: v6.4.0 hooks: - id: ansible-lint files: \.(yaml|yml)$
Activer pre-commit pour le dépôt git
$ pre-commit install pre-commit installed at .git/hooks/pre-commit
Installer avec
$ echo "pre-commit run -a" > .git/hooks/pre-commit $ chmod 700 .git/hooks/pre-commit
Test pre-commit
$ pre-commit run --all-files
Ansible-lint.............................................................Passed
Ou simplement avec la commande “git commit”
$ git commit
Hooks Basic
Issus du repo pre-commit-hooks, ce sont des vérifications de texte basiques.
- Check-added-large-files pour contrôler la taille des fichiers stockés dans vos référentiels
- Check-merge-conflict pour vérifier les conflits de fusion avant de valider quoi que ce soit.
- Trailing-whitespace pour nettoyer le code des espaces blancs inutiles
- End-of-file-fixer pour s'assurer que les fichiers se terminent par une nouvelle ligne et seulement une nouvelle ligne.
- Yamllint pour identifier les erreurs de formatage de votre code automatiquement avant chaque commit, très important pour standardiser le code et faciliter sa lecture
- Yamlfix pour automatiser la correction de formatage
- Checkov pour vérifier la conformité des fichiers de définition Kubernetes selon les meilleures pratiques de développement et les règles personnalisées
- Detect-secrets pour détecter toute donnée sensible et éviter leur stockage dans le code
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 hooks: - id: check-added-large-files - id: check-merge-conflict - //id: check-yaml// - //id: detect-aws-credentials// - //id: detect-private-key// - //id: mixed-line-ending// - id: trailing-whitespace - id: end-of-file-fixer
Hooks additionnel
Ansible Linter
- repo: https://github.com/ansible/ansible-lint.git rev: v6.4.0 hooks: - id: ansible-lint files: \.(yaml|yml)$
AWS CloudFormation
Installer le package cfn-lint
pip3 install cfn-lint
Config pre-commit
repos: - repo: https://github.com/awslabs/cfn-python-lint rev: v0.15.0 # The version of cfn-lint to use hooks: - id: cfn-python-lint files: templates/.*\.(json|yml|yaml)$
Dockerfile linter
Si vous utilisez Docker (par exemple pour les constructions reproductibles ou le CI), ce hooks fournit de nombreuses recommandations intéressantes pour les Dockerfiles
- repo: https://github.com/pryorda/dockerfilelint-precommit-hooks rev: v0.1.0 hooks: - id: dockerfilelint
Kubernetes validation
- repo: https://github.com/Agilicus/pre-commit-hook-k8svalidate.git rev: v0.1.0 hooks: - id: k8svalidate files: .yaml$
Prettier
prettier est un outil Javascript qui peut formater de nombreux types de langage différents. Je trouve qu'il fait un bon travail sur les fichiers Markdown, Javascript, JSON et YAML en particulier.
- repo: https://github.com/pre-commit/mirrors-prettier rev: v2.7.1 hooks: - id: prettier files: \.(js|ts|jsx|tsx|css|less|html|json|markdown|md|yaml|yml)$
Shellcheck
Quelques contrôles utiles et de qualité de vie pour les scripts shell
- repo: https://github.com/shellcheck-py/shellcheck-py rev: v0.8.0.3 hooks: - id: shellcheck
Terraform
- repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.74.1 hooks: - id: terraform_fmt - id: terraform_validate - id: terraform_tflint - id: terraform_tfsec - id: terraform_checkov