Guia: Envieu dades de l'informe d'extensió per correu electrònic a Jenkins

Guia: Envieu dades de l'informe d'extensió per correu electrònic a Jenkins
Groovy Scripting

Visió general de la integració dels informes d'extensió

La integració dels informes d'extensió amb Jenkins per a projectes automatitzats de Java millora la visibilitat dels resultats de les proves, crucial per als entorns d'integració contínua. Aquesta configuració normalment inclou TestNG, Maven i Extent Reporter, gestionats mitjançant SureFire, que permeten compilacions nocturnes i informes detallats.

No obstant això, un repte comú és extreure dades específiques, com ara el recompte de proves i les ràtios d'aprovació/falla del tauler HTML de l'Extent Reporter per incloure'ls a les notificacions per correu electrònic de Jenkins. Això requereix un script o mètode per analitzar aquests detalls de manera eficaç a partir del contingut HTML per a la seva difusió automatitzada.

Comandament Descripció
groovy.json.JsonSlurper S'utilitza a Groovy per analitzar dades amb format JSON, facilitant el maneig de dades dels fitxers o respostes JSON.
new URL().text Crea un objecte URL nou i recupera el contingut com a text, que s'utilitza habitualment per llegir dades directament dels recursos web.
jenkins.model.Jenkins.instance Patró Singleton per accedir a la instància en execució actual de Jenkins, permetent la manipulació de les configuracions i la configuració del treball.
Thread.currentThread().executable S'utilitza al pipeline amb scripts de Jenkins per obtenir una referència a la compilació o el treball que s'executa actualment, sovint per a un maneig dinàmic.
hudson.util.RemotingDiagnostics Permet l'execució d'scripts Groovy en nodes Jenkins remots, utilitzats principalment amb finalitats de diagnòstic dins dels scripts.
Transport.send(message) Part de l'API JavaMail que s'utilitza per enviar un missatge de correu electrònic preparat a l'script, essencial per als sistemes de notificació.

Explicació de la implementació de l'script

Els scripts proporcionats estan dissenyats per automatitzar l'extracció de dades de prova dels informes d'extensió a Jenkins i enviar aquestes dades per correu electrònic com a part d'un bucle de retroalimentació d'integració contínua. El primer comandament important és groovy.json.JsonSlurper, que és essencial per analitzar dades JSON dins de l'entorn Jenkins. Això permet que l'script gestione les respostes o els fitxers JSON de manera eficient, cosa que és crucial per extreure els resultats de la prova amb format JSON dels informes d'extensió. Un altre comandament de tecla utilitzat és new URL().text, que accedeix a l'informe HTML dels informes d'extensió allotjats a Jenkins. Aquesta ordre obté el contingut HTML com a text sense format, la qual cosa permet que l'script reculli dades necessàries com ara les proves totals, les proves superades i les proves fallides.

L'extracció de dades es gestiona encara més utilitzant expressions regulars per trobar patrons específics al text HTML, identificant els nombres associats amb les proves totals, aprovades i suspès. El jenkins.model.Jenkins.instance L'ordre s'utilitza llavors per fer referència a la instància de Jenkins actual, que és necessària per obtenir diversos detalls de la feina i configurar els paràmetres mitjançant programació. L'extracció de dades de publicació, utilitza l'script Transport.send(message) des de l'API de JavaMail per enviar el correu electrònic construït. Aquesta ordre és crucial per enviar notificacions per correu electrònic amb els resultats de les proves extrets, garantint que les parts interessades estiguin actualitzades amb els últims resultats de les proves directament per correu electrònic, millorant així la comunicació i els temps de resposta en els cicles de desenvolupament.

Extracció de dades dels informes d'extensió a Jenkins

Scripts Java i Groovy per a Jenkins Pipelines

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 millorar les notificacions per correu electrònic a Jenkins

Utilitzant Groovy a les accions post-build de 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)

Millores en els informes automatitzats mitjançant Jenkins

La implementació de l'extracció de dades automatitzada i les notificacions per correu electrònic a Jenkins mitjançant Extent Reports optimitza significativament el procés d'integració contínua (CI). Aquesta metodologia no només garanteix actualitzacions oportunes, sinó que també facilita la resolució proactiva de problemes proporcionant a les parts interessades resultats immediats de les proves. El procés aprofita les capacitats de Jenkins per programar i executar proves automatitzades durant la nit, que després s'analitzen per extreure mètriques clau com ara el nombre total de proves, aprovacions i errors directament dels informes HTML generats per Extent Reporter.

Aquesta extracció i informes automatitzats optimitzen el mecanisme de retroalimentació essencial per als entorns de desenvolupament àgils. Mitjançant la integració dels informes d'extensió amb Jenkins, els equips poden gestionar millor els resultats de les proves i mantenir estàndards elevats de qualitat del codi mitjançant un seguiment i una avaluació contínues. Aquestes operacions són fonamentals per mantenir un pipeline de desenvolupament eficient i garantir que tots els membres de l'equip estiguin alineats amb els últims resultats de les proves i estats del projecte.

Preguntes habituals sobre la integració d'informes de Jenkins

  1. Com puc configurar Jenkins per enviar un correu electrònic després d'una compilació?
  2. Podeu configurar-ho a les accions posteriors a la creació de la configuració del vostre treball, utilitzant l'opció Notificació per correu electrònic.
  3. Què són els informes d'extensió en el context de Jenkins?
  4. Extent Reports és una eina de generació d'informes de codi obert que proporciona informes interactius i detallats sobre proves automatitzades, que s'integren fàcilment als pipelines de Jenkins.
  5. Jenkins es pot integrar amb altres eines d'informes a més dels informes d'extensió?
  6. Sí, Jenkins admet la integració amb altres eines d'informes com JUnit, TestNG i més, utilitzant els corresponents connectors.
  7. Com extreu les dades de prova d'un informe HTML a Jenkins?
  8. Normalment feu servir scripts Groovy o Python dins de Jenkins per analitzar el contingut HTML i extreure les dades necessàries.
  9. Quins són els avantatges de les notificacions de correu electrònic automatitzades a Jenkins?
  10. Els correus electrònics automatitzats proporcionen comentaris immediats sobre els estats de compilació i prova, ajudant els equips a resoldre problemes més ràpidament i mantenir fluxos de treball de desplegament continus.

Consideracions finals sobre els informes Jenkins automatitzats

L'automatització de l'extracció de mètriques de prova dels informes d'extensió i la integració d'aquestes a les notificacions de correu electrònic de Jenkins millora significativament les capacitats de supervisió dins d'una canalització de CI. Aquest enfocament permet als equips rebre actualitzacions oportunes sobre els resultats de les proves, promovent accions ràpides per solucionar errors i millorar el codi. El procés racionalitzat no només estalvia temps, sinó que també optimitza l'assignació de recursos assegurant-se que totes les parts interessades estan informades ràpidament sobre l'estat de les compilacions nocturnes, mantenint així un bucle continu de retroalimentació i desenvolupament.