Guida: invio dei dati del report sull'estensione tramite e-mail in Jenkins

Guida: invio dei dati del report sull'estensione tramite e-mail in Jenkins
Guida: invio dei dati del report sull'estensione tramite e-mail in Jenkins

Panoramica dell'integrazione del reporting sull'estensione

L'integrazione di Extent Reporting con Jenkins per progetti Java automatizzati migliora la visibilità dei risultati dei test, fondamentale per gli ambienti di integrazione continua. Questa configurazione include in genere TestNG, Maven ed Extent Reporter, gestiti tramite SureFire, consentendo build notturne e report dettagliati.

Tuttavia, una sfida comune è l'estrazione di dati specifici come il conteggio dei test e i rapporti superato/fallito dal dashboard HTML di Extent Reporter per includerli nelle notifiche e-mail di Jenkins. Ciò richiede uno script o un metodo per analizzare questi dettagli in modo efficace dal contenuto HTML per la diffusione automatizzata.

Comando Descrizione
groovy.json.JsonSlurper Utilizzato in Groovy per analizzare i dati in formato JSON, facilitando la gestione dei dati da file o risposte JSON.
new URL().text Crea un nuovo oggetto URL e recupera il contenuto come testo, comunemente utilizzato per leggere i dati direttamente dalle risorse Web.
jenkins.model.Jenkins.instance Modello singleton per accedere all'istanza corrente di Jenkins in esecuzione, consentendo la manipolazione delle configurazioni e delle impostazioni del lavoro.
Thread.currentThread().executable Utilizzato nella pipeline con script Jenkins per ottenere un riferimento alla build o al processo attualmente in esecuzione, spesso per la gestione dinamica.
hudson.util.RemotingDiagnostics Consente l'esecuzione di script Groovy su nodi Jenkins remoti, utilizzati principalmente per scopi diagnostici all'interno degli script.
Transport.send(message) Parte dell'API JavaMail utilizzata per inviare un messaggio email preparato nello script, essenziale per i sistemi di notifica.

Spiegazione dell'implementazione dello script

Gli script forniti sono progettati per automatizzare l'estrazione dei dati di test dai report Extent in Jenkins e inviare questi dati tramite e-mail come parte di un ciclo di feedback di integrazione continua. Il primo comando importante è groovy.json.JsonSlurper, essenziale per l'analisi dei dati JSON all'interno dell'ambiente Jenkins. Ciò consente allo script di gestire le risposte o i file JSON in modo efficiente, fondamentale per estrarre i risultati dei test formattati in JSON dai report Extent. Un altro comando chiave utilizzato è new URL().text, che accede al report HTML di Extent Reports ospitato su Jenkins. Questo comando recupera il contenuto HTML come testo semplice, consentendo allo script di recuperare i dati necessari come test totali, test superati e falliti.

L'estrazione dei dati viene ulteriormente gestita utilizzando espressioni regolari per trovare modelli specifici nel testo HTML, identificando i numeri associati ai test totali, superati e falliti. IL jenkins.model.Jenkins.instance Il comando viene quindi utilizzato per fare riferimento all'istanza Jenkins corrente, necessaria per recuperare vari dettagli del lavoro e configurare le impostazioni a livello di codice. Dopo l'estrazione dei dati, lo script utilizza Transport.send(message) dall'API JavaMail per inviare l'e-mail costruita. Questo comando è fondamentale per inviare notifiche e-mail con i risultati dei test estratti, garantendo che le parti interessate siano aggiornate con gli ultimi risultati dei test direttamente via e-mail, migliorando così la comunicazione e i tempi di risposta nei cicli di sviluppo.

Estrazione dei dati dai report sulle estensioni in Jenkins

Java e script Groovy per le pipeline Jenkins

import hudson.model.*
import hudson.util.RemotingDiagnostics
import groovy.json.JsonSlurper
def extractData() {
    def build = Thread.currentThread().executable
    def reportUrl = "${build.getProject().url}${build.number}/HTML_20Report/index.html"
    def jenkinsConsole = new URL(reportUrl).text
    def matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Total Tests:\\s*</span>(\\d+)</br>"
    def totalTests = matcher ? Integer.parseInt(matcher[0][1]) : 0
    matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Passed Tests:\\s*</span>(\\d+)</br>"
    def passedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0
    matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Failed Tests:\\s*</span>(\\d+)</br>"
    def failedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0
    return [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 per migliorare le notifiche e-mail in Jenkins

Utilizzo di Groovy nelle azioni post-creazione di Jenkins

import groovy.json.JsonSlurper
import jenkins.model.Jenkins
import javax.mail.Message
import javax.mail.Transport
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
def fetchReportData() {
    def job = Jenkins.instance.getItemByFullName("YourJobName")
    def lastBuild = job.lastBuild
    def reportUrl = "${lastBuild.url}HTML_20Report/index.html"
    new URL(reportUrl).withReader { reader ->
        def data = reader.text
        def 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)

Miglioramenti nel reporting automatizzato tramite Jenkins

L'implementazione automatizzata dell'estrazione dei dati e delle notifiche e-mail all'interno di Jenkins utilizzando Extent Reports ottimizza in modo significativo il processo di integrazione continua (CI). Questa metodologia non solo garantisce aggiornamenti tempestivi, ma facilita anche la risoluzione proattiva dei problemi fornendo alle parti interessate risultati immediati dei test. Il processo sfrutta le capacità di Jenkins per pianificare ed eseguire test automatizzati durante la notte, che vengono poi analizzati per estrarre parametri chiave come il numero totale di test, superamenti e fallimenti direttamente dai report HTML generati da Extent Reporter.

Questa estrazione e reporting automatizzati semplificano il meccanismo di feedback essenziale per gli ambienti di sviluppo agili. Integrando Extent Reports con Jenkins, i team possono gestire meglio i risultati dei test e mantenere elevati standard di qualità del codice attraverso il monitoraggio e la valutazione continui. Queste operazioni sono fondamentali per mantenere una pipeline di sviluppo efficiente e garantire che tutti i membri del team siano allineati con i risultati dei test e gli stati del progetto più recenti.

Domande comuni sull'integrazione di Jenkins Reporting

  1. Come posso configurare Jenkins per inviare un'e-mail dopo una build?
  2. Puoi configurarlo nelle azioni post-compilazione della configurazione del lavoro, utilizzando l'opzione Notifica e-mail.
  3. Che cosa sono i report Extent nel contesto di Jenkins?
  4. Extent Reports è uno strumento di reporting open source che fornisce report interattivi e dettagliati sui test automatizzati, facilmente integrabili nelle pipeline Jenkins.
  5. Jenkins può integrarsi con altri strumenti di reporting oltre a Extent Reports?
  6. Sì, Jenkins supporta l'integrazione con diversi altri strumenti di reporting come JUnit, TestNG e altri, utilizzando i rispettivi plug-in.
  7. Come posso estrarre i dati del test da un report HTML in Jenkins?
  8. In genere si utilizza lo scripting Groovy o Python all'interno di Jenkins per analizzare il contenuto HTML ed estrarre i dati richiesti.
  9. Quali sono i vantaggi delle notifiche e-mail automatizzate in Jenkins?
  10. Le e-mail automatizzate forniscono feedback immediato sugli stati di creazione e test, aiutando i team ad affrontare i problemi più rapidamente e a mantenere flussi di lavoro di distribuzione continui.

Considerazioni finali sul reporting Jenkins automatizzato

Automatizzare l'estrazione dei parametri di test dagli Extent Reports e integrarli nelle notifiche e-mail di Jenkins migliora significativamente le capacità di monitoraggio all'interno di una pipeline CI. Questo approccio consente ai team di ricevere aggiornamenti tempestivi sui risultati dei test, promuovendo azioni rapide per correggere gli errori e migliorare il codice. Il processo semplificato non solo fa risparmiare tempo, ma ottimizza anche l'allocazione delle risorse garantendo che tutte le parti interessate siano tempestivamente informate sullo stato delle costruzioni notturne, mantenendo così un ciclo continuo di feedback e sviluppo.