Présentation de l'intégration des rapports d'étendue
L'intégration d'Extent Reporting avec Jenkins pour les projets Java automatisés améliore la visibilité des résultats des tests, cruciale pour les environnements d'intégration continue. Cette configuration inclut généralement TestNG, Maven et Extent Reporter, gérés via SureFire, permettant des builds nocturnes et des rapports détaillés.
Cependant, un défi courant consiste à extraire des données spécifiques telles que le nombre de tests et les taux de réussite/échec du tableau de bord HTML Extent Reporter pour les inclure dans les notifications par e-mail de Jenkins. Cela nécessite un script ou une méthode pour analyser efficacement ces détails du contenu HTML en vue d'une diffusion automatisée.
| Commande | Description |
|---|---|
| groovy.json.JsonSlurper | Utilisé dans Groovy pour analyser les données au format JSON, facilitant ainsi la gestion des données à partir de fichiers ou de réponses JSON. |
| new URL().text | Crée un nouvel objet URL et récupère le contenu sous forme de texte, couramment utilisé pour lire des données directement à partir de ressources Web. |
| jenkins.model.Jenkins.instance | Modèle Singleton pour accéder à l'instance en cours d'exécution de Jenkins, permettant la manipulation des configurations et des paramètres de tâche. |
| Thread.currentThread().executable | Utilisé dans le pipeline scripté Jenkins pour obtenir une référence à la build ou à la tâche en cours d'exécution, souvent à des fins de gestion dynamique. |
| hudson.util.RemotingDiagnostics | Permet l'exécution de scripts Groovy sur des nœuds Jenkins distants, principalement utilisés à des fins de diagnostic dans les scripts. |
| Transport.send(message) | Partie de l'API JavaMail utilisée pour envoyer un message électronique préparé dans le script, indispensable pour les systèmes de notification. |
Explication de l'implémentation du script
Les scripts fournis sont conçus pour automatiser l'extraction des données de test des rapports d'étendue dans Jenkins et envoyer ces données par e-mail dans le cadre d'une boucle de rétroaction d'intégration continue. La première commande importante est , ce qui est essentiel pour analyser les données JSON dans l'environnement Jenkins. Cela permet au script de gérer efficacement les réponses ou les fichiers JSON, ce qui est crucial pour extraire les résultats des tests formatés en JSON à partir des rapports d'étendue. Un autre raccourci clavier utilisé est , qui accède au rapport HTML des rapports d'étendue hébergés sur Jenkins. Cette commande récupère le contenu HTML sous forme de texte brut, permettant au script de récupérer les données nécessaires telles que le nombre total de tests, les tests réussis et échoués.
L'extraction des données est en outre gérée à l'aide d'expressions régulières pour rechercher des modèles spécifiques dans le texte HTML, identifiant les nombres associés aux tests totaux, réussis et échoués. Le La commande est ensuite utilisée pour référencer l'instance Jenkins actuelle, ce qui est nécessaire pour récupérer divers détails de la tâche et configurer les paramètres par programme. Après l'extraction des données, le script utilise à partir de l'API JavaMail pour envoyer l'e-mail construit. Cette commande est cruciale pour envoyer des notifications par e-mail avec les résultats des tests extraits, garantissant que les parties prenantes sont informées des derniers résultats des tests directement par e-mail, améliorant ainsi la communication et les temps de réponse dans les cycles de développement.
Extraction de données à partir de rapports d'étendue dans Jenkins
Java et Groovy Scripting pour les pipelines Jenkins
import hudson.model.*import hudson.util.RemotingDiagnosticsimport groovy.json.JsonSlurperdef extractData() {def build = Thread.currentThread().executabledef reportUrl = "${build.getProject().url}${build.number}/HTML_20Report/index.html"def jenkinsConsole = new URL(reportUrl).textdef matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Total Tests:\\s*</span>(\\d+)</br>"def totalTests = matcher ? Integer.parseInt(matcher[0][1]) : 0matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Passed Tests:\\s*</span>(\\d+)</br>"def passedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Failed Tests:\\s*</span>(\\d+)</br>"def failedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0return [totalTests, passedTests, failedTests]}def sendEmail(testResults) {def emailExt = Jenkins.instance.getExtensionList('hudson.tasks.MailSender')[0]def emailBody = "Total Tests: ${testResults[0]}, Passed: ${testResults[1]}, Failed: ${testResults[2]}"emailExt.sendMail(emailBody, "jenkins@example.com", "Test Report Summary")}def results = extractData()sendEmail(results)
Script pour améliorer les notifications par e-mail dans Jenkins
Utiliser Groovy dans les actions post-construction de Jenkins
import groovy.json.JsonSlurperimport jenkins.model.Jenkinsimport javax.mail.Messageimport javax.mail.Transportimport javax.mail.internet.InternetAddressimport javax.mail.internet.MimeMessagedef fetchReportData() {def job = Jenkins.instance.getItemByFullName("YourJobName")def lastBuild = job.lastBuilddef reportUrl = "${lastBuild.url}HTML_20Report/index.html"new URL(reportUrl).withReader { reader ->def data = reader.textdef jsonSlurper = new JsonSlurper()def object = jsonSlurper.parseText(data)return object}}def sendNotification(buildData) {def session = Jenkins.instance.getMailSession()def message = new MimeMessage(session)message.setFrom(new InternetAddress("jenkins@example.com"))message.setRecipients(Message.RecipientType.TO, "developer@example.com")message.setSubject("Automated Test Results")message.setText("Test Results: ${buildData.totalTests} Total, ${buildData.passed} Passed, ${buildData.failed} Failed.")Transport.send(message)}def reportData = fetchReportData()sendNotification(reportData)
Améliorations des rapports automatisés via Jenkins
La mise en œuvre d'une extraction automatisée de données et de notifications par e-mail dans Jenkins à l'aide d'Extent Reports optimise considérablement le processus d'intégration continue (CI). Cette méthodologie garantit non seulement des mises à jour en temps opportun, mais facilite également la résolution proactive des problèmes en fournissant aux parties prenantes des résultats de test immédiats. Le processus exploite les capacités de Jenkins pour planifier et exécuter des tests automatisés pendant la nuit, qui sont ensuite analysés pour extraire des mesures clés telles que le nombre total de tests, de réussites et d'échecs directement à partir des rapports HTML générés par Extent Reporter.
Cette extraction et ce reporting automatisés rationalisent le mécanisme de feedback essentiel aux environnements de développement agiles. En intégrant Extent Reports à Jenkins, les équipes peuvent mieux gérer les résultats des tests et maintenir des normes élevées de qualité du code grâce à une surveillance et une évaluation continues. Ces opérations sont essentielles pour maintenir un pipeline de développement efficace et garantir que tous les membres de l'équipe sont alignés sur les derniers résultats des tests et l'état des projets.
- Comment configurer Jenkins pour envoyer un e-mail après une build ?
- Vous pouvez configurer cela dans les actions post-construction de la configuration de votre tâche, à l'aide de l'option Notification par e-mail.
- Qu’est-ce que les rapports d’étendue dans le contexte de Jenkins ?
- Extent Reports est un outil de reporting open source qui fournit des rapports interactifs et détaillés sur les tests automatisés, facilement intégrés aux pipelines Jenkins.
- Jenkins peut-il s'intégrer à d'autres outils de reporting en plus des rapports d'étendue ?
- Oui, Jenkins prend en charge l'intégration avec plusieurs autres outils de reporting tels que JUnit, TestNG, etc., à l'aide des plugins respectifs.
- Comment extraire les données de test d’un rapport HTML dans Jenkins ?
- Vous utilisez généralement les scripts Groovy ou Python dans Jenkins pour analyser le contenu HTML et extraire les données requises.
- Quels sont les avantages des notifications automatisées par e-mail dans Jenkins ?
- Les e-mails automatisés fournissent un retour immédiat sur les statuts de construction et de test, aidant ainsi les équipes à résoudre les problèmes plus rapidement et à maintenir des flux de déploiement continus.
L'automatisation de l'extraction des métriques de test à partir des rapports d'étendue et leur intégration dans les notifications par e-mail Jenkins améliorent considérablement les capacités de surveillance au sein d'un pipeline CI. Cette approche permet aux équipes de recevoir des mises à jour en temps opportun sur les résultats des tests, favorisant ainsi des actions rapides pour corriger les échecs et améliorer le code. Le processus rationalisé permet non seulement de gagner du temps, mais optimise également l'allocation des ressources en garantissant que toutes les parties prenantes sont rapidement informées de l'état des builds nocturnes, maintenant ainsi une boucle continue de retour d'information et de développement.