Skip to main content

Intégration continue

Quand on parle de CI (intégration continue), on définit une méthode permettant de vérifier que chaque modification du code ne casse pas le projet :

  • sur la sécurité
  • sur les bonnes pratiques de codage
  • sur de l'analyse de code
  • en automatisant certaines tâches (build, minify...)
  • sur le respect des spécifications du projet à travers des tests
    • unitaires
    • fonctionnels

Nous allons voir les approches permettant de réaliser une bone integration continue à travers une application PHP

info

Quel que soit le langage, vous trouverez des outils et des solutions similaires.

Projet support

Vous allez reprendre le TP sur le site de la sirène pour explorer ces concepts. J'ai repris la correction et j'ai ajouté quelques éléments pour illustrer cela.

Récupérez le projet en le forkant dans votre groupe gitlab vpsX

info

Pour les tests en local, nous garderons notre stack de développement vu en TP pour des questions de simplicité.

Phpqa

On trouve sur github un phpqa permettant de réaliser beaucoup de tests concernant les projets php.

Ce projet est une suite d'images docker contenant tous les outils préinstallés en fonction de la version de php à utiliser et de la distribution utilisée.

Vous pouvez constater que cette image contient énormément d'outils. Nous allons en explorer quelques-uns.

Nous allons utiliser d'abord en local l'image docker jakzal/phpqa:php8.3-alpine qui correspond à la version de php avec laquelle le projet a été développé.

info

alpine est une distribution sécurisée légère très utilisée comme base pour des images docker

warning

Phpqa va créer des fichiers temporaires dans le dossier tmp-phpqa. Ajoutez dans le fichier .gitignore une entrée pour ce dossier pour éviter les éventuels conflits.

docker pull jakzal/phpqa:php8.3-alpine

Vous pouvez voir tous les outils disponibles pour cette version

docker run -it --rm jakzal/phpqa:php8.3-alpine

Vous allez créer un alias pour vous simplifier la vie :

alias phpqa='docker run --init -it --rm -v "$(pwd):/project" -v "$(pwd)/tmp-phpqa:/tmp" -w /project jakzal/phpqa:php8.3-alpine'
Explications

Un alias est un raccourci. En tapant phpqa, c'est comme si vous tapiez la commande docker run ... en entier.

--init : permet de faire traverser les signaux et les processus entre le conteneur et l'hôte

-it : équivalent à -i (interactive) -t (tty) c'est-à-dire qu'il peut recevoir des entrées standards dans un pseudo-terminal

--rm : permet de supprimer le conteneur quand il est arrếté

-v : crée un volume entre votre dossier courant (pwd) et le dossier /project du conteneur

-w : définit le répertoire de travail du conteneur

Mise en place du projet

  • Clonez le projet depuis votre groupe vps de gitlab en le nommant comme vous le souhaitez
  • Utilisez la commande make existingProject pour installer les dépendances et configurer le fichier .env.local
  • Lancez les migrations
  • Lancez les fixtures
  • Affichez votre site

Sécurité

Vous allez utiliser l'image docker pour vérifier que vos dépendances php ne contiennent pas de failles de sécurité.

phpqa local-php-security-checker  --path=./composer.lock

On pourrait également utiliser la commande symfony pour réaliser la même chose

symfony local:check:security
Failles détectées

Des alertes CVE apparaissent.

Corrigez ces failles en utilisant les commandes composer adéquates.

Règles de codage

Toujours avec la même image docker, vous allez utiliser les outils phpcs et phpstan

Phpcs pour Php Code Sniffer est un outil permettant de valider votre code en fonction des règles de codage PSR. Vous allez donc valider le code à travers la norme PSR-12

phpqa phpcs -v --standard=PSR12 --ignore=./src/Kernel.php ./src
Les espaces !!

Vous pouvez voir qu'en écrivant naturellement, on commet énormément d'erreurs d'écriture ne respectant pas les standards !

Heureusement, des outils peuvent être utilisés pour corriger cela automatiquement. D'ailleurs phpcs vous propose d'utiliser phpcbf (Code Beautifier and Fixer). Lançons cet outil et relançons phpcs.

phpqa phpcbf -v --standard=PSR12 --ignore=./src/Kernel.php ./src
phpqa phpcs -v --standard=PSR12 --ignore=./src/Kernel.php ./src

Analyse static du code - phpstan

Phpstan est un outil permettant de faire de l'analyse static du code en vérifiant par exemple les types d'entrée et sortie des fonctions. Cela permet de détecter très tôt des erreurs dans le code.

La philosophie de phpstan est : "Trouvez des bugs sans écrire de tests !"

Il possède 10 niveaux de règles allant de 0, la plus permissive au niveau 9 la plus stricte.

Pour un projet symfony, le bon réglage est le niveau 3.

phpqa phpstan analyse ./src --level 3
Erreur !

Corriger l'erreur et relancez le test.

Vérification du twig

phpqa possède également un outil appelé twig-linter pour vérifier le code twig.

phpqa  twig-linter lint ./templates
Erreur !

Corriger l'erreur et relancez le test.

Maintenant, que l'on a fait un point sur la façon de vérifier une application, il va falloir automatiser tout cela ;).