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 groovy.json.JsonSlurper, 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 new URL().text, 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 jenkins.model.Jenkins.instance 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 Transport.send(message) 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.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)
Skript za izboljšanje e-poštnih obvestil v Jenkinsu
Uporaba Groovyja v Jenkinsovih dejanjih po izdelavi
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)
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.
Pogosta vprašanja o integraciji poročanja Jenkins
- Kako konfiguriram Jenkinsa za pošiljanje e-pošte po gradnji?
- To lahko konfigurirate v dejanjih po izdelavi konfiguracije svojega opravila z možnostjo e-poštnega obvestila.
- Kaj so poročila o obsegu v kontekstu Jenkinsa?
- 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.
- Ali se lahko Jenkins integrira z drugimi orodji za poročanje poleg Extent Reports?
- Da, Jenkins podpira integracijo z več drugimi orodji za poročanje, kot so JUnit, TestNG in drugimi, z uporabo ustreznih vtičnikov.
- Kako izvlečem testne podatke iz poročila HTML v Jenkinsu?
- Običajno uporabljate skripte Groovy ali Python znotraj Jenkinsa za razčlenitev vsebine HTML in ekstrahiranje zahtevanih podatkov.
- Kakšne so prednosti samodejnih e-poštnih obvestil v Jenkinsu?
- 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.
Končne misli o avtomatiziranem poročanju Jenkins
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.