Guide: Skicka omfattningsrapportdata via e-post i Jenkins

Guide: Skicka omfattningsrapportdata via e-post i Jenkins
Groovy Scripting

Översikt över integrering av omfattningsrapportering

Att integrera omfattningsrapportering med Jenkins för automatiserade Java-projekt förbättrar synligheten för testresultat, vilket är avgörande för kontinuerliga integrationsmiljöer. Denna inställning inkluderar vanligtvis TestNG, Maven och Extent Reporter, som hanteras genom SureFire, vilket möjliggör nattliga byggen och detaljerad rapportering.

En vanlig utmaning är dock att extrahera specifik data som testantal och godkänd/underkänd-kvot från Extent Reporter HTML-instrumentpanelen för inkludering i Jenkins e-postmeddelanden. Detta kräver ett skript eller en metod för att tolka dessa detaljer effektivt från HTML-innehållet för automatisk spridning.

Kommando Beskrivning
groovy.json.JsonSlurper Används i Groovy för att analysera JSON-formaterad data, vilket underlättar datahantering från JSON-filer eller svar.
new URL().text Skapar ett nytt URL-objekt och hämtar innehållet som text, som vanligtvis används för att läsa data direkt från webbresurser.
jenkins.model.Jenkins.instance Singleton-mönster för att komma åt den aktuella instansen av Jenkins, vilket möjliggör manipulering av jobbkonfigurationer och inställningar.
Thread.currentThread().executable Används i Jenkins scripted pipeline för att få en referens till den aktuella versionen eller jobbet, ofta för dynamisk hantering.
hudson.util.RemotingDiagnostics Tillåter exekvering av Groovy-skript på fjärranslutna Jenkins-noder, som främst används för diagnostiska ändamål inom skript.
Transport.send(message) En del av JavaMail API används för att skicka ett e-postmeddelande som är förberett i skriptet, vilket är viktigt för aviseringssystem.

Förklaring av skriptimplementering

Skripten som tillhandahålls är utformade för att automatisera extraheringen av testdata från Extent Reports i Jenkins och skicka dessa data via e-post som en del av en kontinuerlig återkopplingsslinga för integration. Det första viktiga kommandot är groovy.json.JsonSlurper, vilket är viktigt för att analysera JSON-data i Jenkins-miljön. Detta gör att skriptet kan hantera JSON-svar eller filer effektivt, vilket är avgörande för att extrahera testresultaten formaterade i JSON från Extent Reports. Ett annat tangentkommando som används är new URL().text, som får åtkomst till HTML-rapporten för omfattningsrapporter på Jenkins. Det här kommandot hämtar HTML-innehållet som vanlig text, vilket gör att skriptet kan skrapa nödvändiga data som totala tester, godkända och misslyckade tester.

Extraheringen av data hanteras vidare genom att använda reguljära uttryck för att hitta specifika mönster i HTML-texten, identifiera siffrorna som är associerade med totala, godkända och misslyckade tester. De jenkins.model.Jenkins.instance kommandot används sedan för att referera till den aktuella Jenkins-instansen, vilket är nödvändigt för att hämta olika jobbdetaljer och konfigurera inställningar programmatiskt. Efter dataextraktion använder skriptet Transport.send(message) från JavaMail API för att skicka det konstruerade e-postmeddelandet. Det här kommandot är avgörande för att skicka e-postmeddelanden med de extraherade testresultaten, för att säkerställa att intressenter uppdateras med de senaste testresultaten direkt via e-post, vilket förbättrar kommunikationen och svarstiderna i utvecklingscyklerna.

Extrahera data från omfattningsrapporter i Jenkins

Java och Groovy Scripting för 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)

Skript för att förbättra e-postmeddelanden i Jenkins

Använder Groovy i Jenkins Post-Build Actions

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)

Förbättringar i automatiserad rapportering genom Jenkins

Genom att implementera automatiserad dataextraktion och e-postmeddelanden inom Jenkins med hjälp av Extent Reports optimeras processen för kontinuerlig integration (CI) avsevärt. Denna metod säkerställer inte bara snabba uppdateringar utan underlättar också proaktiv problemlösning genom att ge intressenter omedelbara testresultat. Processen utnyttjar Jenkins förmåga att schemalägga och köra automatiserade tester över en natt, som sedan analyseras för att extrahera nyckelmått som det totala antalet tester, godkända och misslyckanden direkt från HTML-rapporterna som genereras av Extent Reporter.

Denna automatiserade extrahering och rapportering effektiviserar feedbackmekanismen som är nödvändig för agila utvecklingsmiljöer. Genom att integrera Extent Reports med Jenkins kan team bättre hantera testresultat och upprätthålla höga standarder för kodkvalitet genom kontinuerlig övervakning och utvärdering. Dessa operationer är avgörande för att upprätthålla en effektiv utvecklingspipeline och för att säkerställa att alla teammedlemmar är i linje med de senaste testresultaten och projektstatus.

Vanliga frågor om Jenkins Reporting Integration

  1. Hur konfigurerar jag Jenkins att skicka ett e-postmeddelande efter en build?
  2. Du kan konfigurera detta i efterbyggandet av din jobbkonfiguration med alternativet E-postmeddelande.
  3. Vad är omfattningsrapporter i samband med Jenkins?
  4. Extent Reports är ett rapporteringsverktyg med öppen källkod som tillhandahåller interaktiva och detaljerade rapporter om automatiserade tester, enkelt integrerade i Jenkins pipelines.
  5. Kan Jenkins integrera med andra rapporteringsverktyg förutom Extent Reports?
  6. Ja, Jenkins stöder integration med flera andra rapporteringsverktyg som JUnit, TestNG och mer, med hjälp av respektive plugins.
  7. Hur extraherar jag testdata från en HTML-rapport i Jenkins?
  8. Du använder vanligtvis Groovy- eller Python-skript inom Jenkins för att analysera HTML-innehåll och extrahera nödvändig data.
  9. Vilka är fördelarna med automatiska e-postmeddelanden i Jenkins?
  10. Automatiserade e-postmeddelanden ger omedelbar feedback om bygg- och teststatus, vilket hjälper team att lösa problem snabbare och upprätthålla kontinuerliga distributionsarbetsflöden.

Slutliga tankar om automatisk Jenkins-rapportering

Att automatisera extraheringen av testmätvärden från Extent Reports och integrera dessa i Jenkins e-postmeddelanden förbättrar avsevärt övervakningsmöjligheterna inom en CI-pipeline. Detta tillvägagångssätt gör det möjligt för team att få snabba uppdateringar om testresultat, vilket främjar snabba åtgärder för att åtgärda fel och förbättra koden. Den strömlinjeformade processen sparar inte bara tid utan optimerar också resursallokeringen genom att säkerställa att alla intressenter omgående informeras om de nattliga byggnadernas status, vilket upprätthåller en kontinuerlig loop av feedback och utveckling.