Intégration de l’outil dans votre CI/CD
Importance des tests continus
Intégrer l’exécution des tests dans un pipeline d’intégration continue (CI) transforme fondamentalement la manière dont les équipes de développement logiciel assurent la qualité et la fiabilité de leurs applications.
Automatiser le déploiement dans un pipeline de développement continu (CD) permet de déployer automatiquement et de manière fiable des modifications de code validées, assurant que chaque nouvelle version fonctionne correctement et ne perturbe pas les fonctionnalités existantes. En intégrant des déploiements fréquents incluant des tests, les équipes peuvent rapidement identifier et résoudre les problèmes.
Cette pratique permet de vérifier automatiquement à chaque étape du développement que le code nouvellement intégré fonctionne comme prévu et ne rompt pas les fonctionnalités existantes. En effectuant des tests automatiques - qu’il s’agisse de tests unitaires, d’intégration, fonctionnels ou de sécurité - dès qu’un changement est apporté, les équipes peuvent identifier et résoudre rapidement les problèmes, bien avant que le logiciel n’atteigne la production.
Cette approche favorise une culture de feedback rapide, améliore la collaboration...
Configuration de Cypress avec Jenkins
Jenkins est un outil d’intégration continue (CI) qui excelle dans l’automatisation des tâches répétitives. L’un des grands avantages de Jenkins est sa capacité à planifier des tâches, y compris l’exécution de tests automatisés. Cela signifie que vous pouvez configurer Jenkins pour exécuter vos tests Cypress à des intervalles réguliers (par exemple, tous les soirs à minuit) ou à chaque fois qu’un changement est apporté à votre base de code. Cette capacité est utile pour les pratiques de développement logiciel agile et pour le déploiement continu, où des mises à jour fréquentes nécessitent une validation constante pour s’assurer que le logiciel reste stable et fonctionnel.
1. Job Jenkins
Un job jenkins est une tâche ou un ensemble de tâches définies dans Jenkins. Chaque job représente une étape spécifique du processus de développement telle que la compilation du code, l’exécution des tests, l’analyse de la qualité du code ou le déploiement de l’application. Les jobs jenkins peuvent être configurés pour s’exécuter après un changement dans le code ou périodiquement (chaque nuit). Vous pouvez enchaîner plusieurs jobs pour créer des pipelines complexes
a. Image Docker personnalisée
Pour les besoins du projet, nous avons intégré Jenkins localement avec Docker afin de vous montrer les fonctionnalités.
Si vous souhaitez le mettre en place dans votre projet, voici les étapes à suivre.
Dans le fichier docker-compose.yml, ajoutez :
jenkins: 1 // service nommé jenkins
image: jenkins/jenkins:lts 2 // utilise l'image
jenkins/jenkins:lts
ports:
- "8080:8080" // Port pour l'interface web de Jenkins
- "50000:50000" // Port pour les connexions d'agents Jenkins
volumes:
- jenkins_data:/var/jenkins_home // Un volume nommé jenkins_
data est également utilisé pour persister les données de Jenkins,
vous permettant de maintenir...
Configuration de Cypress avec Gitlab
De même, vous pouvez utilisé Gitlab pour définir vos étapes de build dans un fichier .gitlab-ci.yml à la racine de votre projet. Voici un exemple de configuration qui exécute des tests Cypress et génère un rapport :
image: cypress/browsers:latest
stages:
- test
cypress_tests:
stage: test
script:
- npm install
- $(npm bin)/cypress run
- npx mochawesome-merge cypress/reports/*.json >
cypress/reports/combined_report.json
- npx marge cypress/reports/combined_report.json -f report
-o cypress/reports
artifacts:
paths:
- cypress/reports/
expire_in: 1 week
only:
- master
Après l’exécution des pipelines, les rapports générés par mochawesome seront disponibles en tant qu’artefacts dans Gitlab. Vous pouvez accéder à ces artefacts en allant dans le pipeline concerné, puis en cliquant sur le job correspondant. Les artefacts seront listés et pourront être téléchargés ou visualisés directement selon leur type.
Meilleures pratiques
Les tests dans un environnement CI doivent être rapides pour ne pas ralentir le processus de développement. Concentrez-vous sur les tests qui fournissent le meilleur rapport entre valeur et temps d’exécution. Pour les tests plus longs, envisagez de les déplacer dans une suite de tests qui ne s’exécute que lors de certaines phases du développement, comme avant une release.
Assurez-vous que vos tests n’interfèrent pas les uns avec les autres en utilisant des données de test isolées. Cela peut signifier l’utilisation de bases de données en mémoire, de mocks ou de stubs pour simuler des services externes.
Priorisez les tests qui doivent être exécutés à chaque publication de code (tests critiques pour la fonctionnalité de base) et ceux qui peuvent être exécutés moins fréquemment. Utilisez des tags ou des attributs pour segmenter les tests en catégories logiques.
L’utilisation de conteneurs (comme Docker) pour exécuter des tests dans la CI peut aider à maintenir la consistance entre les environnements de développement, de test et de production, réduisant ainsi les « ça marche sur ma machine » problématiques.
Surveillez régulièrement l’efficacité des tests dans la CI. Supprimez ou refactorisez les tests...