Ghid: Trimiteți datele raportului de extindere prin e-mail în Jenkins

Ghid: Trimiteți datele raportului de extindere prin e-mail în Jenkins
Ghid: Trimiteți datele raportului de extindere prin e-mail în Jenkins

Prezentare de ansamblu asupra integrării raportării de extindere

Integrarea Extent Reporting cu Jenkins pentru proiectele Java automatizate îmbunătățește vizibilitatea rezultatelor testelor, cruciale pentru mediile de integrare continuă. Această configurare include de obicei TestNG, Maven și Extent Reporter, gestionate prin SureFire, permițând versiuni de noapte și raportare detaliată.

Cu toate acestea, o provocare obișnuită este extragerea de date specifice, cum ar fi numărul de teste și ratele de promovare/eșec din tabloul de bord HTML Extent Reporter pentru a le include în notificările prin e-mail Jenkins. Acest lucru necesită un script sau o metodă pentru a analiza aceste detalii în mod eficient din conținutul HTML pentru diseminare automată.

Comanda Descriere
groovy.json.JsonSlurper Folosit în Groovy pentru a analiza date formatate JSON, facilitând gestionarea datelor din fișiere sau răspunsuri JSON.
new URL().text Creează un nou obiect URL și preia conținutul ca text, folosit în mod obișnuit pentru a citi date direct din resursele web.
jenkins.model.Jenkins.instance Model Singleton pentru a accesa instanța curentă de rulare a lui Jenkins, permițând manipularea configurațiilor și setărilor jobului.
Thread.currentThread().executable Folosit în pipeline cu script Jenkins pentru a obține o referință la versiunea sau jobul care rulează în prezent, adesea pentru manipulare dinamică.
hudson.util.RemotingDiagnostics Permite executarea scripturilor Groovy pe nodurile Jenkins la distanță, utilizate în principal în scopuri de diagnosticare în cadrul scripturilor.
Transport.send(message) O parte a API-ului JavaMail folosit pentru a trimite un mesaj de e-mail pregătit în script, esențial pentru sistemele de notificare.

Explicația implementării scriptului

Scripturile furnizate sunt concepute pentru a automatiza extragerea datelor de testare din rapoartele de extindere în Jenkins și pentru a trimite aceste date prin e-mail ca parte a unei bucle de feedback de integrare continuă. Prima comandă importantă este groovy.json.JsonSlurper, care este esențial pentru analizarea datelor JSON în mediul Jenkins. Acest lucru permite scriptului să gestioneze răspunsurile sau fișierele JSON în mod eficient, crucial pentru extragerea rezultatelor testelor formatate în JSON din rapoartele de extindere. O altă comandă cheie folosită este new URL().text, care accesează raportul HTML al rapoartelor de extindere găzduit pe Jenkins. Această comandă preia conținutul HTML sub formă de text simplu, permițând script-ului să curețe datele necesare, cum ar fi testele totale, testele trecute și testele eșuate.

Extragerea datelor este gestionată în continuare prin utilizarea expresiilor regulate pentru a găsi modele specifice în textul HTML, identificând numerele asociate cu testele totale, trecute și nereușite. The jenkins.model.Jenkins.instance Comanda este apoi utilizată pentru a face referire la instanța Jenkins curentă, care este necesară pentru a prelua diverse detalii despre job și pentru a configura setările în mod programatic. Extragerea datelor post, folosește scriptul Transport.send(message) din API-ul JavaMail pentru a trimite e-mailul construit. Această comandă este crucială pentru trimiterea notificărilor prin e-mail cu rezultatele extrase ale testului, asigurându-se că părțile interesate sunt actualizate cu cele mai recente rezultate ale testării direct prin e-mail, îmbunătățind astfel timpii de comunicare și răspuns în ciclurile de dezvoltare.

Extragerea datelor din rapoartele de extindere în Jenkins

Scripturi Java și Groovy pentru 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 pentru îmbunătățirea notificărilor prin e-mail în Jenkins

Folosind Groovy în acțiunile post-build 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)

Îmbunătățiri ale raportării automate prin Jenkins

Implementarea extragerii automate a datelor și a notificărilor prin e-mail în Jenkins folosind Extent Reports optimizează semnificativ procesul de integrare continuă (CI). Această metodologie nu numai că asigură actualizări în timp util, dar facilitează și rezolvarea proactivă a problemelor, oferind părților interesate rezultate imediate ale testelor. Procesul folosește capacitățile lui Jenkins de a programa și rula teste automate peste noapte, care sunt apoi analizate pentru a extrage valori cheie, cum ar fi numărul total de teste, treceri și eșecuri, direct din rapoartele HTML generate de Extent Reporter.

Această extragere și raportare automată eficientizează mecanismul de feedback esențial pentru mediile de dezvoltare agile. Prin integrarea Extent Reports cu Jenkins, echipele pot gestiona mai bine rezultatele testelor și pot menține standarde înalte de calitate a codului prin monitorizare și evaluare continuă. Aceste operațiuni sunt esențiale pentru menținerea unui canal de dezvoltare eficient și pentru asigurarea faptului că toți membrii echipei sunt aliniați la cele mai recente rezultate ale testării și stările proiectului.

Întrebări frecvente despre integrarea raportării Jenkins

  1. Cum configurez Jenkins să trimită un e-mail după o construcție?
  2. Puteți configura acest lucru în acțiunile post-build ale configurației jobului dvs., folosind opțiunea Notificare prin e-mail.
  3. Ce este Extent Reports în contextul lui Jenkins?
  4. Extent Reports este un instrument de raportare open-source care oferă rapoarte interactive și detaliate despre testele automate, ușor de integrat în conductele Jenkins.
  5. Se poate integra Jenkins cu alte instrumente de raportare, în afară de Extent Reports?
  6. Da, Jenkins acceptă integrarea cu alte câteva instrumente de raportare, cum ar fi JUnit, TestNG și altele, folosind plugin-urile respective.
  7. Cum extrag datele de testare dintr-un raport HTML în Jenkins?
  8. De obicei, utilizați scripturi Groovy sau Python în Jenkins pentru a analiza conținutul HTML și a extrage datele necesare.
  9. Care sunt beneficiile notificărilor automate prin e-mail în Jenkins?
  10. E-mailurile automate oferă feedback imediat asupra stărilor de construire și testare, ajutând echipele să rezolve problemele mai rapid și să mențină fluxuri de lucru continue de implementare.

Considerări finale despre raportarea automată Jenkins

Automatizarea extragerii valorilor de testare din rapoartele de extindere și integrarea acestora în notificările prin e-mail Jenkins îmbunătățește semnificativ capacitățile de monitorizare în cadrul unei conducte CI. Această abordare permite echipelor să primească actualizări în timp util despre rezultatele testelor, promovând acțiuni rapide pentru remedierea defecțiunilor și îmbunătățirea codului. Procesul simplificat nu numai că economisește timp, ci și optimizează alocarea resurselor, asigurându-se că toate părțile interesate sunt informate cu promptitudine despre starea build-urilor de noapte, menținând astfel o buclă continuă de feedback și dezvoltare.