Vodnik: Pošljite podatke poročila o obsegu po e-pošti v Jenkinsu

Groovy Scripting

Pregled integracije poročanja o obsegu

Integracija poročanja o obsegu z Jenkinsom za avtomatizirane projekte Java izboljša vidnost rezultatov testov, kar je ključnega pomena za okolja neprekinjene integracije. Ta nastavitev običajno vključuje TestNG, Maven in Extent Reporter, ki se upravlja prek SureFire, kar omogoča nočne gradnje in podrobno poročanje.

Vendar pa je pogost izziv pridobivanje specifičnih podatkov, kot so število testov in razmerje uspešno/neuspešno, z nadzorne plošče HTML Extent Reporter za vključitev v Jenkinsova e-poštna obvestila. To zahteva skript ali metodo za učinkovito razčlenitev teh podrobnosti iz vsebine HTML za samodejno razširjanje.

Ukaz Opis
groovy.json.JsonSlurper Uporablja se v Groovyju za razčlenjevanje formatiranih podatkov JSON, kar olajša obdelavo podatkov iz datotek ali odgovorov JSON.
new URL().text Ustvari nov predmet URL in pridobi vsebino kot besedilo, ki se običajno uporablja za branje podatkov neposredno iz spletnih virov.
jenkins.model.Jenkins.instance Vzorec Singleton za dostop do trenutnega delujočega primerka Jenkinsa, ki omogoča manipulacijo konfiguracij in nastavitev opravil.
Thread.currentThread().executable Uporablja se v Jenkinsovem skriptnem cevovodu za pridobitev sklica na trenutno delujočo gradnjo ali opravilo, pogosto za dinamično ravnanje.
hudson.util.RemotingDiagnostics Omogoča izvajanje skriptov Groovy na oddaljenih vozliščih Jenkins, ki se uporabljajo predvsem za diagnostične namene znotraj skriptov.
Transport.send(message) Del API-ja JavaMail, ki se uporablja za pošiljanje e-poštnega sporočila, pripravljenega v skriptu, bistvenega pomena za sisteme obveščanja.

Razlaga implementacije skripta

Priloženi skripti so zasnovani za avtomatizacijo pridobivanja testnih podatkov iz poročil o obsegu v Jenkinsu in pošiljanje teh podatkov po e-pošti kot del neprekinjene povratne zanke integracije. Prvi pomemben ukaz je , ki je bistvenega pomena za razčlenjevanje podatkov JSON v okolju Jenkins. To omogoča skriptu učinkovito obravnavanje odgovorov ali datotek JSON, kar je ključnega pomena za ekstrahiranje rezultatov testa, oblikovanih v JSON, iz poročil o obsegu. Drug uporabljen ključni ukaz je , ki dostopa do poročila HTML poročil o obsegu, ki gostuje na Jenkinsu. Ta ukaz pridobi vsebino HTML kot navadno besedilo, kar skriptu omogoči, da postrga potrebne podatke, kot so skupni testi, opravljeni in neuspešni testi.

Ekstrakcija podatkov se nadalje upravlja z uporabo regularnih izrazov za iskanje specifičnih vzorcev v besedilu HTML, ki identificirajo številke, povezane s skupnimi, opravljenimi in neuspešnimi testi. The ukaz se nato uporabi za sklicevanje na trenutni primerek Jenkins, ki je potreben za pridobitev različnih podrobnosti opravila in programsko konfiguracijo nastavitev. Po ekstrakciji podatkov, skript uporablja iz API-ja JavaMail za pošiljanje sestavljene e-pošte. Ta ukaz je ključnega pomena za pošiljanje e-poštnih obvestil z izvlečenimi rezultati testiranja, kar zagotavlja, da so deležniki obveščeni o najnovejših rezultatih testiranja neposredno po e-pošti, s čimer se izboljšajo komunikacija in odzivni časi v razvojnih ciklih.

Pridobivanje podatkov iz poročil o obsegu v Jenkinsu

Java in Groovy Scripting za Jenkinsove cevovode

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)

Skript za izboljšanje e-poštnih obvestil v Jenkinsu

Uporaba Groovyja v Jenkinsovih dejanjih po izdelavi

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)

Izboljšave v avtomatiziranem poročanju prek Jenkinsa

Implementacija avtomatiziranega pridobivanja podatkov in e-poštnih obvestil v Jenkinsu z uporabo poročil o obsegu bistveno optimizira proces neprekinjene integracije (CI). Ta metodologija ne zagotavlja samo pravočasnih posodobitev, temveč tudi olajša proaktivno reševanje težav, tako da deležnikom zagotovi takojšnje rezultate testov. Proces izkorišča Jenkinsove zmožnosti za načrtovanje in izvajanje samodejnih testov čez noč, ki se nato razčlenijo, da se izvlečejo ključne metrike, kot je skupno število testov, uspešnosti in napak, neposredno iz poročil HTML, ki jih ustvari Extent Reporter.

To avtomatizirano pridobivanje in poročanje poenostavi mehanizem povratnih informacij, ki je bistven za agilna razvojna okolja. Z integracijo poročil o obsegu z Jenkinsom lahko ekipe bolje upravljajo rezultate testov in vzdržujejo visoke standarde kakovosti kode z nenehnim spremljanjem in vrednotenjem. Te operacije so ključnega pomena za vzdrževanje učinkovitega razvojnega cevovoda in zagotavljanje, da so vsi člani ekipe usklajeni z najnovejšimi rezultati testiranja in statusi projekta.

  1. Kako konfiguriram Jenkinsa za pošiljanje e-pošte po gradnji?
  2. To lahko konfigurirate v dejanjih po izdelavi konfiguracije svojega opravila z možnostjo e-poštnega obvestila.
  3. Kaj so poročila o obsegu v kontekstu Jenkinsa?
  4. Extent Reports je odprtokodno orodje za poročanje, ki zagotavlja interaktivna in podrobna poročila o avtomatiziranih testih, ki jih je enostavno integrirati v Jenkinsove cevovode.
  5. Ali se lahko Jenkins integrira z drugimi orodji za poročanje poleg Extent Reports?
  6. Da, Jenkins podpira integracijo z več drugimi orodji za poročanje, kot so JUnit, TestNG in drugimi, z uporabo ustreznih vtičnikov.
  7. Kako izvlečem testne podatke iz poročila HTML v Jenkinsu?
  8. Običajno uporabljate skripte Groovy ali Python znotraj Jenkinsa za razčlenitev vsebine HTML in ekstrahiranje zahtevanih podatkov.
  9. Kakšne so prednosti samodejnih e-poštnih obvestil v Jenkinsu?
  10. Avtomatizirana e-poštna sporočila zagotavljajo takojšnje povratne informacije o statusih gradnje in testiranja, kar ekipam pomaga pri hitrejšem reševanju težav in vzdrževanju neprekinjenih delovnih tokov uvajanja.

Avtomatizacija pridobivanja testnih meritev iz poročil o obsegu in njihova integracija v Jenkinsova e-poštna obvestila bistveno izboljša zmogljivosti spremljanja v cevovodu CI. Ta pristop omogoča ekipam, da prejmejo pravočasne posodobitve o rezultatih testov, kar spodbuja hitre ukrepe za odpravljanje napak in izboljšanje kode. Poenostavljen postopek ne le prihrani čas, ampak tudi optimizira dodeljevanje virov z zagotavljanjem, da so vse zainteresirane strani takoj obveščene o statusu nočnih gradenj, s čimer se ohranja stalna zanka povratnih informacij in razvoja.