Agence web » Actualités du digital » Comment créer un pipeline GitLab CI pour analyser statiquement des projets PHP –

Comment créer un pipeline GitLab CI pour analyser statiquement des projets PHP –

Image avec les logos GitLab et PHPStan

L’exécution d’une analyse statique sur votre code permet de gagner du temps en découvrant les problèmes cachés. PHPStan est un outil d’analyse statique pour PHP qui vous aide à augmenter la qualité de votre base de code. Voici comment exécuter PHPStan dans vos pipelines GitLab CI.

Il est bon d’exécuter PHPStan régulièrement pendant que vous développez de nouvelles fonctionnalités. Cependant, l’utiliser localement ne vous emmène pas loin. Vous comptez sur les autres membres de votre équipe aussi disciplinés que vous. L’intégration d’une analyse statique dans un flux de travail CI / CD garantit que le code ne peut pas être fusionné s’il briserait la branche principale de votre projet.

Obtenir la configuration avec PHPStan

Vous devez d’abord ajouter PHPStan à votre projet. Nous avons déjà un guide détaillé sur l’installation et la configuration de PHPStan, nous ne couvrirons donc que les bases ici.

Tout d’abord, utilisez Composer pour installer PHPStan:

composer require --dev phpstan/phpstan

Ensuite, créez une base phpstan.neon fichier de configuration dans votre projet:

parameters:
  level: max
  paths:
    - src
    - tests
  tmpDir: .tmp

Le répertoire temporaire est remplacé pour aider la mise en cache de GitLab CI, configuration ci-dessous.

Vous pouvez maintenant exécuter PHPStan localement pour vérifier que votre configuration fonctionne:

vendor/bin/phpstan analyse

À ce stade, peu importe que les tests réussissent.

Configurer GitLab pour CI

Assurez-vous d’avoir poussé votre code vers un projet sur votre serveur GitLab. Vous devrez vérifier que la fonction Pipelines est activée pour votre projet – si vous voyez «CI / CD» dans la barre latérale gauche, vous êtes prêt à partir.

Capture d'écran de l'élément de menu Pipelines dans GitLab

Pour activer le système CI de votre projet, cliquez sur le bouton «Paramètres» dans la barre latérale. Développez la section «Visibilité, fonctionnalités du projet, autorisations» et activez la fonctionnalité «Pipelines».

Capture d'écran de l'activation des pipelines dans GitLab

Si vous utilisez les demandes de fusion (MR) de GitLab de manière disciplinée, vous pouvez maintenant configurer GitLab pour empêcher les MR de fusionner à moins qu’ils aient un pipeline réussi. Développez la section des paramètres «Requêtes de fusion» et cochez le bouton à bascule «Les pipelines doivent réussir». Cliquez sur «Enregistrer» pour confirmer. Cela vous empêchera de fusionner accidentellement un MR lorsque PHPStan échouera à ses modifications.

Capture d'écran de l'activation des pipelines MR requis de GitLab

Pour utiliser GitLab CI, vous devez disposer d’un GitLab Runner défini au niveau de l’instance, du groupe ou du projet. Les coureurs sont responsables de l’exécution des tâches CI créées par le système GitLab.

Nous allons utiliser l’image PHPStan Docker pour exécuter PHPStan dans notre pipeline CI. Cela nécessite l’utilisation d’un GitLab Runner à l’aide de l’exécuteur Docker. Si vous utilisez une instance autogérée et que vous devez configurer un nouveau Runner, suivez les instructions de notre article sur la configuration de GitLab CI.

Création d’un pipeline GitLab CI

GitLab CI est configuré à l’aide d’un .gitlab-ci.yml fichier à la racine de votre projet. Les pipelines CI prennent en charge plusieurs étapes séquentielles. Les travaux de chaque étape sont exécutés en parallèle. Pour nos besoins d’exécuter PHPStan, nous avons besoin d’une seule étape qui exécute un travail.

stages:
  - phpstan

cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - .tmp/
    - vendor/

phpstan:
  stage: phpstan
  image: ghcr.io/phpstan/phpstan
  script:
    - analyse --no-progress --error-format gitlab > phpstan.json
  artifacts:
    when: always
    reports:
      codequality: phpstan.json

Ce fichier GitLab CI contient tout ce dont nous avons besoin pour exécuter PHPStan dans notre pipeline. Nous définissons une étape, phpstan, contenant un travail également appelé phpstan. Le travail utilise l’image officielle PHPStan Docker du registre de conteneurs GitHub.

Le cache GitLab CI est configuré pour mettre en cache le .tmp et vendor répertoires. Cela améliorera les performances des exécutions suivantes sur la même branche. Le cache sera restauré automatiquement. De retour dans notre phpstan.neon, nous définissons le tmpDir à .tmp pour cette raison – cela signifie que nous pouvons désormais le référencer en toute confiance dans la configuration de mise en cache du pipeline CI.

Nous mettons également en cache vendor pour éviter de réinstaller inutilement les dépendances de Composer à chaque exécution. Notez que vous n’avez pas besoin de courir composer install manuellement – l’image officielle PHPStan Docker l’invoque automatiquement.

La --error-format l’indicateur est passé à PHPStan analyse commander. Cela configure PHPStan pour créer un fichier JSON au format accepté par le rapport de qualité de code de GitLab. En bas dans le artifacts section, ce fichier est téléchargé sur GitLab une fois la tâche terminée.

Utilisation du pipeline

Engagez votre .gitlab-ci.yml et poussez vers votre serveur GitLab. Le système CI devrait maintenant démarrer et créer votre premier pipeline. Utilisez le lien «CI / CD» dans la navigation de gauche pour afficher la progression du pipeline.

Capture d'écran des pipelines PHPStan GitLab CI

Si vous obtenez une coche verte, les tests de PHPStan ont réussi! Votre succursale est en bon état et prête à fusionner. Si une croix rouge apparaît, vous avez encore du travail à faire. PHPStan et GitLab CI viennent de vous empêcher de fusionner du code potentiellement cassé.

Vous pouvez obtenir la liste des erreurs en cliquant sur l’icône de téléchargement à droite du pipeline. Sélectionnez l’artefact de qualité du code PHPStan pour obtenir le rapport JSON des erreurs que PHPStan a trouvées.

Utilisation avec les demandes de fusion

La lecture manuelle du JSON ne constitue pas une expérience formidable. Cependant, les demandes de fusion de GitLab exposent automatiquement le contenu du rapport. Étant donné que le rapport est étiqueté comme un artefact de qualité de code GitLab, GitLab sait comment présenter les informations qu’il contient.

Capture d'écran du widget GitLab Code Quality Merge Request

Les demandes de fusion avec un pipeline défaillant doivent afficher une section extensible «Qualité du code». Cela indique le nombre d’erreurs rencontrées. Développez la section pour afficher une liste complète des problèmes détectés par PHPStan.

Une fois que vous avez résolu les problèmes, transférez vos modifications vers GitLab. Le pipeline fonctionnera à nouveau. Une fois terminé, vous verrez le nouvel état sur l’écran Pipelines et dans le widget de qualité de code de votre demande de fusion.

Conclusion

PHPStan vous aide à écrire un meilleur PHP qui est moins sensible aux problèmes cachés. Pour en tirer le meilleur parti, l’outil doit être intégré à votre flux de travail de développement de manière à ne pas être ignoré ou contourné.

L’utilisation de PHPStan avec GitLab CI vous donne la cohérence dont vous avez besoin pour être sûr de votre code. La configuration de GitLab pour bloquer les MR avec un pipeline défaillant signifie que les modifications ne peuvent pas entrer dans votre branche principale sans passer une exécution PHPStan. La prise en charge complète de PHPStan pour les rapports de qualité de code de GitLab facilite l’évaluation des erreurs sans quitter l’interface utilisateur Web, ce qui vous aide à résoudre rapidement les problèmes découverts.