Anleitung: Umfangsberichtsdaten per E-Mail in Jenkins senden

Anleitung: Umfangsberichtsdaten per E-Mail in Jenkins senden
Anleitung: Umfangsberichtsdaten per E-Mail in Jenkins senden

Überblick über die Extent Reporting-Integration

Die Integration von Extent Reporting mit Jenkins für automatisierte Java-Projekte verbessert die Sichtbarkeit von Testergebnissen, was für kontinuierliche Integrationsumgebungen von entscheidender Bedeutung ist. Dieses Setup umfasst normalerweise TestNG, Maven und Extent Reporter, verwaltet über SureFire, was nächtliche Builds und detaillierte Berichte ermöglicht.

Eine häufige Herausforderung besteht jedoch darin, bestimmte Daten wie Testanzahlen und Pass/Fail-Verhältnisse aus dem HTML-Dashboard von Extent Reporter zu extrahieren, um sie in Jenkins-E-Mail-Benachrichtigungen aufzunehmen. Hierzu ist ein Skript oder eine Methode erforderlich, um diese Details effektiv aus dem HTML-Inhalt für die automatisierte Verbreitung zu analysieren.

Befehl Beschreibung
groovy.json.JsonSlurper Wird in Groovy zum Parsen von JSON-formatierten Daten verwendet und erleichtert so die Datenverarbeitung aus JSON-Dateien oder -Antworten.
new URL().text Erstellt ein neues URL-Objekt und ruft den Inhalt als Text ab, der üblicherweise zum direkten Lesen von Daten aus Webressourcen verwendet wird.
jenkins.model.Jenkins.instance Singleton-Muster für den Zugriff auf die aktuell laufende Instanz von Jenkins, was die Manipulation von Jobkonfigurationen und -einstellungen ermöglicht.
Thread.currentThread().executable Wird in der Jenkins-Skriptpipeline verwendet, um einen Verweis auf den aktuell ausgeführten Build oder Job abzurufen, häufig für die dynamische Verarbeitung.
hudson.util.RemotingDiagnostics Ermöglicht die Ausführung von Groovy-Skripten auf Remote-Jenkins-Knoten, die hauptsächlich für Diagnosezwecke innerhalb von Skripten verwendet werden.
Transport.send(message) Teil der JavaMail-API, der zum Senden einer im Skript vorbereiteten E-Mail-Nachricht verwendet wird und für Benachrichtigungssysteme unerlässlich ist.

Erläuterung der Skriptimplementierung

Die bereitgestellten Skripte sollen die Extraktion von Testdaten aus Extent Reports in Jenkins automatisieren und diese Daten im Rahmen einer kontinuierlichen Integrations-Feedbackschleife per E-Mail versenden. Der erste wichtige Befehl ist groovy.json.JsonSlurper, was für das Parsen von JSON-Daten in der Jenkins-Umgebung unerlässlich ist. Dadurch kann das Skript JSON-Antworten oder -Dateien effizient verarbeiten, was für das Extrahieren der in JSON formatierten Testergebnisse aus Extent Reports von entscheidender Bedeutung ist. Ein weiterer verwendeter Schlüsselbefehl ist new URL().text, der auf den HTML-Bericht von Extent Reports zugreift, der auf Jenkins gehostet wird. Dieser Befehl ruft den HTML-Inhalt als einfachen Text ab und ermöglicht es dem Skript, benötigte Daten wie Gesamttests, bestandene und fehlgeschlagene Tests zu extrahieren.

Die Datenextraktion wird weiter verwaltet, indem reguläre Ausdrücke verwendet werden, um bestimmte Muster im HTML-Text zu finden und die Zahlen zu identifizieren, die mit Gesamttests, bestandenen Tests und nicht bestandenen Tests verknüpft sind. Der jenkins.model.Jenkins.instance Der Befehl wird dann verwendet, um auf die aktuelle Jenkins-Instanz zu verweisen. Dies ist erforderlich, um verschiedene Auftragsdetails abzurufen und Einstellungen programmgesteuert zu konfigurieren. Nach der Datenextraktion verwendet das Skript Transport.send(message) von der JavaMail-API, um die erstellte E-Mail zu senden. Dieser Befehl ist für das Versenden von E-Mail-Benachrichtigungen mit den extrahierten Testergebnissen von entscheidender Bedeutung und stellt sicher, dass Stakeholder direkt per E-Mail über die neuesten Testergebnisse informiert werden, wodurch die Kommunikations- und Reaktionszeiten in Entwicklungszyklen verbessert werden.

Extrahieren von Daten aus Extent-Berichten in Jenkins

Java und 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 zur Verbesserung von E-Mail-Benachrichtigungen in Jenkins

Verwendung von Groovy in Jenkins-Post-Build-Aktionen

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)

Verbesserungen im automatisierten Reporting durch Jenkins

Durch die Implementierung automatisierter Datenextraktion und E-Mail-Benachrichtigungen in Jenkins mithilfe von Extent Reports wird der kontinuierliche Integrationsprozess (CI) erheblich optimiert. Diese Methodik gewährleistet nicht nur zeitnahe Aktualisierungen, sondern erleichtert auch die proaktive Problemlösung, indem sie den Beteiligten sofortige Testergebnisse liefert. Der Prozess nutzt die Fähigkeiten von Jenkins, automatisierte Tests über Nacht zu planen und auszuführen, die dann analysiert werden, um wichtige Kennzahlen wie die Gesamtzahl der Tests, bestandenen Tests und Fehler direkt aus den von Extent Reporter generierten HTML-Berichten zu extrahieren.

Diese automatisierte Extraktion und Berichterstellung rationalisiert den Feedback-Mechanismus, der für agile Entwicklungsumgebungen unerlässlich ist. Durch die Integration von Extent Reports mit Jenkins können Teams Testergebnisse besser verwalten und durch kontinuierliche Überwachung und Bewertung hohe Standards der Codequalität aufrechterhalten. Diese Vorgänge sind von entscheidender Bedeutung, um eine effiziente Entwicklungspipeline aufrechtzuerhalten und sicherzustellen, dass alle Teammitglieder über die neuesten Testergebnisse und Projektstatus informiert sind.

Häufige Fragen zur Jenkins Reporting-Integration

  1. Wie konfiguriere ich Jenkins so, dass nach einem Build eine E-Mail gesendet wird?
  2. Sie können dies in den Post-Build-Aktionen Ihrer Jobkonfiguration mithilfe der Option „E-Mail-Benachrichtigung“ konfigurieren.
  3. Was sind Extent Reports im Kontext von Jenkins?
  4. Extent Reports ist ein Open-Source-Berichtstool, das interaktive und detaillierte Berichte zu automatisierten Tests bereitstellt und einfach in Jenkins-Pipelines integriert werden kann.
  5. Kann Jenkins neben Extent Reports auch andere Reporting-Tools integrieren?
  6. Ja, Jenkins unterstützt die Integration mit mehreren anderen Reporting-Tools wie JUnit, TestNG und mehr über entsprechende Plugins.
  7. Wie extrahiere ich Testdaten aus einem HTML-Bericht in Jenkins?
  8. Normalerweise verwenden Sie Groovy- oder Python-Skripte innerhalb von Jenkins, um HTML-Inhalte zu analysieren und erforderliche Daten zu extrahieren.
  9. Welche Vorteile bieten automatisierte E-Mail-Benachrichtigungen in Jenkins?
  10. Automatisierte E-Mails geben sofortiges Feedback zum Build- und Teststatus und helfen Teams, Probleme schneller zu lösen und kontinuierliche Bereitstellungsworkflows aufrechtzuerhalten.

Abschließende Gedanken zum automatisierten Jenkins-Reporting

Durch die Automatisierung der Extraktion von Testmetriken aus Extent Reports und deren Integration in Jenkins-E-Mail-Benachrichtigungen werden die Überwachungsfunktionen innerhalb einer CI-Pipeline erheblich verbessert. Dieser Ansatz ermöglicht es Teams, zeitnahe Updates über Testergebnisse zu erhalten, was schnelle Maßnahmen zur Behebung von Fehlern und zur Verbesserung des Codes fördert. Der optimierte Prozess spart nicht nur Zeit, sondern optimiert auch die Ressourcenzuweisung, indem er sicherstellt, dass alle Beteiligten umgehend über den Status der nächtlichen Builds informiert werden, wodurch eine kontinuierliche Feedback- und Entwicklungsschleife aufrechterhalten wird.