Gids: Omvangrapportgegevens verzenden via e-mail in Jenkins

Gids: Omvangrapportgegevens verzenden via e-mail in Jenkins
Gids: Omvangrapportgegevens verzenden via e-mail in Jenkins

Overzicht van de mate van rapportage-integratie

De integratie van Extent Reporting met Jenkins voor geautomatiseerde Java-projecten verbetert de zichtbaarheid van testresultaten, cruciaal voor continue integratieomgevingen. Deze configuratie omvat doorgaans TestNG, Maven en Extent Reporter, beheerd via SureFire, waardoor nachtelijke builds en gedetailleerde rapportage mogelijk zijn.

Een veel voorkomende uitdaging is echter het extraheren van specifieke gegevens, zoals testaantallen en geslaagd/mislukt-ratio's, uit het HTML-dashboard van Extent Reporter, zodat deze kunnen worden opgenomen in e-mailmeldingen van Jenkins. Hiervoor is een script of methode nodig om deze details effectief uit de HTML-inhoud te parseren voor geautomatiseerde verspreiding.

Commando Beschrijving
groovy.json.JsonSlurper Gebruikt in Groovy om JSON-geformatteerde gegevens te parseren, waardoor gegevensverwerking uit JSON-bestanden of reacties wordt vergemakkelijkt.
new URL().text Creëert een nieuw URL-object en haalt de inhoud op als tekst, vaak gebruikt om gegevens rechtstreeks uit webbronnen te lezen.
jenkins.model.Jenkins.instance Singleton-patroon voor toegang tot het huidige actieve exemplaar van Jenkins, waardoor manipulatie van taakconfiguraties en instellingen mogelijk is.
Thread.currentThread().executable Wordt gebruikt in de scriptpijplijn van Jenkins om een ​​verwijzing te krijgen naar de momenteel actieve build of taak, vaak voor dynamische verwerking.
hudson.util.RemotingDiagnostics Maakt het uitvoeren van Groovy-scripts op externe Jenkins-knooppunten mogelijk, voornamelijk gebruikt voor diagnostische doeleinden binnen scripts.
Transport.send(message) Onderdeel van de JavaMail API dat wordt gebruikt om een ​​e-mailbericht te verzenden dat in het script is opgesteld, essentieel voor meldingssystemen.

Uitleg van scriptimplementatie

De meegeleverde scripts zijn ontworpen om de extractie van testgegevens uit Extent Reports in Jenkins te automatiseren en deze gegevens via e-mail te verzenden als onderdeel van een continue feedbackloop voor integratie. Het eerste belangrijke commando is groovy.json.JsonSlurper, wat essentieel is voor het parseren van JSON-gegevens binnen de Jenkins-omgeving. Hierdoor kan het script JSON-reacties of -bestanden efficiënt verwerken, wat cruciaal is voor het extraheren van de testresultaten die in JSON zijn opgemaakt uit Extent Reports. Een ander sleutelcommando dat wordt gebruikt is new URL().text, die toegang heeft tot het HTML-rapport van Extent Reports dat wordt gehost op Jenkins. Met deze opdracht wordt de HTML-inhoud opgehaald als platte tekst, waardoor het script de benodigde gegevens kan verzamelen, zoals het totale aantal tests, geslaagde en mislukte tests.

De extractie van gegevens wordt verder beheerd door reguliere expressies te gebruiken om specifieke patronen in de HTML-tekst te vinden, waarbij de getallen worden geïdentificeerd die verband houden met totale, geslaagde en mislukte tests. De jenkins.model.Jenkins.instance De opdracht wordt vervolgens gebruikt om te verwijzen naar het huidige Jenkins-exemplaar, wat nodig is om verschillende taakdetails op te halen en instellingen programmatisch te configureren. Post-gegevensextractie, gebruikt het script Transport.send(message) vanuit de JavaMail API om de samengestelde e-mail te verzenden. Deze opdracht is cruciaal voor het verzenden van e-mailmeldingen met de geëxtraheerde testresultaten, zodat belanghebbenden rechtstreeks via e-mail op de hoogte worden gehouden van de nieuwste testresultaten, waardoor de communicatie en responstijden in ontwikkelingscycli worden verbeterd.

Gegevens extraheren uit omvangrapporten in Jenkins

Java en Groovy Scripting voor 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 om e-mailmeldingen in Jenkins te verbeteren

Groovy gebruiken in post-build-acties van 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)

Verbeteringen in geautomatiseerde rapportage via Jenkins

Het implementeren van geautomatiseerde gegevensextractie en e-mailmeldingen binnen Jenkins met behulp van Extent Reports optimaliseert het continue integratieproces (CI) aanzienlijk. Deze methodologie zorgt niet alleen voor tijdige updates, maar vergemakkelijkt ook de proactieve oplossing van problemen door belanghebbenden onmiddellijke testresultaten te bieden. Het proces maakt gebruik van de mogelijkheden van Jenkins om geautomatiseerde tests 's nachts te plannen en uit te voeren, die vervolgens worden geparseerd om belangrijke statistieken, zoals het totale aantal tests, slagen en mislukkingen, rechtstreeks uit de HTML-rapporten te halen die door Extent Reporter worden gegenereerd.

Deze geautomatiseerde extractie en rapportage stroomlijnen het feedbackmechanisme dat essentieel is voor flexibele ontwikkelomgevingen. Door Extent Reports te integreren met Jenkins kunnen teams testresultaten beter beheren en hoge normen voor codekwaliteit handhaven door middel van continue monitoring en evaluatie. Deze activiteiten zijn van cruciaal belang voor het behoud van een efficiënte ontwikkelingspijplijn en om ervoor te zorgen dat alle teamleden op één lijn zitten met de nieuwste testresultaten en projectstatussen.

Veelgestelde vragen over Jenkins Reporting-integratie

  1. Hoe configureer ik Jenkins om een ​​e-mail te sturen na een build?
  2. U kunt dit configureren in de post-build-acties van uw taakconfiguratie, met behulp van de optie E-mailmelding.
  3. Wat zijn uitgebreide rapporten in de context van Jenkins?
  4. Extent Reports is een open-source rapportagetool die interactieve en gedetailleerde rapporten over geautomatiseerde tests biedt, eenvoudig te integreren in Jenkins-pijplijnen.
  5. Kan Jenkins naast Extent Reports integreren met andere rapportagetools?
  6. Ja, Jenkins ondersteunt integratie met verschillende andere rapportagetools zoals JUnit, TestNG en meer, met behulp van de respectievelijke plug-ins.
  7. Hoe extraheer ik testgegevens uit een HTML-rapport in Jenkins?
  8. Normaal gesproken gebruikt u Groovy- of Python-scripts binnen Jenkins om HTML-inhoud te parseren en de vereiste gegevens te extraheren.
  9. Wat zijn de voordelen van geautomatiseerde e-mailmeldingen in Jenkins?
  10. Geautomatiseerde e-mails geven onmiddellijke feedback over de build- en teststatussen, waardoor teams problemen sneller kunnen aanpakken en continue implementatieworkflows kunnen handhaven.

Laatste gedachten over geautomatiseerde Jenkins-rapportage

Het automatiseren van de extractie van teststatistieken uit Extent Reports en het integreren ervan in Jenkins e-mailmeldingen verbetert de monitoringmogelijkheden binnen een CI-pijplijn aanzienlijk. Deze aanpak stelt teams in staat tijdig updates te ontvangen over testresultaten, waardoor snelle acties worden bevorderd om fouten op te lossen en de code te verbeteren. Het gestroomlijnde proces bespaart niet alleen tijd, maar optimaliseert ook de toewijzing van middelen door ervoor te zorgen dat alle belanghebbenden onmiddellijk worden geïnformeerd over de status van de nachtelijke builds, waardoor een continue lus van feedback en ontwikkeling wordt gehandhaafd.