Pregled integracije izvješća o opsegu
Integriranje Extent Reportinga s Jenkinsom za automatizirane Java projekte poboljšava vidljivost ishoda testiranja, što je ključno za kontinuirana integracijska okruženja. Ova postavka obično uključuje TestNG, Maven i Extent Reporter, kojima se upravlja putem SureFirea, što omogućuje noćne nadogradnje i detaljna izvješća.
Međutim, čest je izazov izdvajanje specifičnih podataka kao što su brojevi testova i omjeri prolaznosti/padnosti s nadzorne ploče Extent Reporter HTML za uključivanje u Jenkinsove obavijesti putem e-pošte. Ovo zahtijeva skriptu ili metodu za učinkovito analiziranje ovih detalja iz HTML sadržaja za automatizirano širenje.
| Naredba | Opis |
|---|---|
| groovy.json.JsonSlurper | Koristi se u Groovyju za analizu JSON formatiranih podataka, olakšavajući rukovanje podacima iz JSON datoteka ili odgovora. |
| new URL().text | Stvara novi URL objekt i dohvaća sadržaj kao tekst, koji se obično koristi za čitanje podataka izravno s web izvora. |
| jenkins.model.Jenkins.instance | Singleton obrazac za pristup trenutno pokrenutoj instanci Jenkinsa, dopuštajući manipulaciju konfiguracijama i postavkama poslova. |
| Thread.currentThread().executable | Koristi se u Jenkinsovom skriptiranom cjevovodu za dobivanje reference na trenutno pokrenutu izgradnju ili posao, često za dinamičko rukovanje. |
| hudson.util.RemotingDiagnostics | Omogućuje izvršavanje Groovy skripti na udaljenim Jenkins čvorovima, primarno korištenih u dijagnostičke svrhe unutar skripti. |
| Transport.send(message) | Dio JavaMail API-ja koji se koristi za slanje poruke e-pošte pripremljene u skripti, bitne za sustave obavijesti. |
Objašnjenje implementacije skripte
Priložene skripte osmišljene su za automatiziranje ekstrakcije podataka testiranja iz izvješća o opsegu u Jenkinsu i slanje tih podataka e-poštom kao dio kontinuirane povratne sprege integracije. Prva važna naredba je groovy.json.JsonSlurper, što je bitno za raščlanjivanje JSON podataka unutar Jenkins okruženja. To omogućuje skripti da učinkovito rukuje JSON odgovorima ili datotekama, što je ključno za izdvajanje rezultata testa formatiranih u JSON-u iz Extent Reports. Druga ključna naredba koja se koristi je new URL().text, koji pristupa HTML izvješću Extent Reports hostiranih na Jenkinsu. Ova naredba dohvaća HTML sadržaj kao običan tekst, omogućujući skripti da struže potrebne podatke poput ukupnog broja testova, položenih i neuspješnih testova.
Ekstrakcija podataka dalje se upravlja korištenjem regularnih izraza za pronalaženje specifičnih uzoraka u HTML tekstu, identificiranje brojeva povezanih s ukupnim, položenim i neuspjelim testovima. The jenkins.model.Jenkins.instance naredba se zatim koristi za referenciranje trenutne Jenkinsove instance, što je neophodno za dohvaćanje raznih pojedinosti o poslu i programsko konfiguriranje postavki. Post ekstrakcija podataka, skripta koristi Transport.send(message) iz JavaMail API-ja za slanje konstruirane e-pošte. Ova je naredba ključna za slanje obavijesti e-poštom s izdvojenim rezultatima testiranja, osiguravajući da dionici budu ažurirani s najnovijim rezultatima testiranja izravno putem e-pošte, čime se poboljšava komunikacija i vrijeme odgovora u razvojnim ciklusima.
Izdvajanje podataka iz izvješća o opsegu u Jenkinsu
Java i Groovy skriptiranje za Jenkinsove cjevovode
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)
Skripta za poboljšanje obavijesti putem e-pošte u Jenkinsu
Korištenje Groovyja u Jenkinsovim radnjama nakon izgradnje
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)
Poboljšanja u automatiziranom izvješćivanju putem Jenkinsa
Implementacija automatizirane ekstrakcije podataka i obavijesti e-poštom unutar Jenkinsa pomoću Extent Reports značajno optimizira proces kontinuirane integracije (CI). Ova metodologija ne samo da osigurava pravovremena ažuriranja, već također olakšava proaktivno rješavanje problema pružajući dionicima trenutne rezultate testiranja. Proces iskorištava Jenkinsove mogućnosti za planiranje i pokretanje automatiziranih testova preko noći, koji se potom analiziraju kako bi se izdvojili ključni podaci poput ukupnog broja testova, prolaza i neuspjeha izravno iz HTML izvješća koje generira Extent Reporter.
Ova automatizirana ekstrakcija i izvješćivanje pojednostavljuju mehanizam povratnih informacija koji je bitan za agilna razvojna okruženja. Integriranjem Extent Reports s Jenkinsom, timovi mogu bolje upravljati rezultatima testiranja i održavati visoke standarde kvalitete koda kontinuiranim praćenjem i evaluacijom. Ove su operacije ključne za održavanje učinkovitog razvojnog toka i osiguravanje da su svi članovi tima usklađeni s najnovijim rezultatima testiranja i statusima projekta.
Uobičajena pitanja o integraciji Jenkins izvješća
- Kako mogu konfigurirati Jenkinsa da pošalje e-poštu nakon izgradnje?
- To možete konfigurirati u radnjama nakon izgradnje konfiguracije vašeg posla, koristeći opciju Obavijest e-poštom.
- Što su Extent Reports u kontekstu Jenkinsa?
- Extent Reports je alat za izvješćivanje otvorenog koda koji pruža interaktivna i detaljna izvješća o automatiziranim testovima, lako integrirana u Jenkinsove kanale.
- Može li se Jenkins integrirati s drugim alatima za izvješćivanje osim Extent Reports?
- Da, Jenkins podržava integraciju s nekoliko drugih alata za izvješćivanje kao što su JUnit, TestNG i drugi, koristeći odgovarajuće dodatke.
- Kako izvući testne podatke iz HTML izvješća u Jenkinsu?
- Obično koristite Groovy ili Python skriptiranje unutar Jenkinsa za analizu HTML sadržaja i izdvajanje potrebnih podataka.
- Koje su prednosti automatiziranih obavijesti e-poštom u Jenkinsu?
- Automatizirana e-pošta pruža trenutne povratne informacije o statusima izgradnje i testiranja, pomažući timovima da brže riješe probleme i održavaju kontinuirane tijekove rada implementacije.
Završne misli o automatiziranom Jenkinsovom izvješćivanju
Automatizirano izdvajanje testnih metrika iz Extent Reports i njihova integracija u Jenkinsove obavijesti putem e-pošte značajno poboljšava mogućnosti praćenja unutar CI cjevovoda. Ovaj pristup omogućuje timovima primanje pravovremenih ažuriranja o rezultatima testiranja, promičući brze radnje prema popravljanju grešaka i poboljšanju koda. Pojednostavljeni proces ne samo da štedi vrijeme, već i optimizira raspodjelu resursa osiguravajući da su svi dionici promptno obaviješteni o statusu noćnih izrada, čime se održava kontinuirana petlja povratnih informacija i razvoja.