Průvodce: Odesílání dat sestavy rozsahu e-mailem v Jenkins

Průvodce: Odesílání dat sestavy rozsahu e-mailem v Jenkins
Průvodce: Odesílání dat sestavy rozsahu e-mailem v Jenkins

Přehled integrace hlášení rozsahu

Integrace hlášení o rozsahu s Jenkins pro automatizované projekty Java zvyšuje viditelnost výsledků testů, což je zásadní pro prostředí kontinuální integrace. Toto nastavení obvykle zahrnuje TestNG, Maven a Extent Reporter, spravované pomocí SureFire, což umožňuje noční sestavení a podrobné hlášení.

Běžným problémem je však extrahování konkrétních dat, jako jsou počty testů a poměry úspěšnosti/neúspěšnosti, z řídicího panelu HTML Extent Reporter pro zahrnutí do e-mailových oznámení Jenkins. To vyžaduje skript nebo metodu pro efektivní analýzu těchto podrobností z obsahu HTML pro automatizované šíření.

Příkaz Popis
groovy.json.JsonSlurper Používá se v Groovy k analýze dat ve formátu JSON, což usnadňuje manipulaci s daty ze souborů nebo odpovědí JSON.
new URL().text Vytvoří nový objekt URL a načte obsah jako text, který se běžně používá ke čtení dat přímo z webových zdrojů.
jenkins.model.Jenkins.instance Vzor Singleton pro přístup k aktuální spuštěné instanci Jenkins, což umožňuje manipulaci s konfiguracemi a nastaveními úloh.
Thread.currentThread().executable Používá se ve skriptovaném potrubí Jenkins k získání odkazu na aktuálně běžící sestavení nebo úlohu, často pro dynamické zpracování.
hudson.util.RemotingDiagnostics Umožňuje spouštění skriptů Groovy na vzdálených uzlech Jenkins, které se primárně používají pro diagnostické účely ve skriptech.
Transport.send(message) Část JavaMail API sloužící k odeslání e-mailové zprávy připravené ve skriptu, nezbytné pro oznamovací systémy.

Vysvětlení implementace skriptu

Poskytnuté skripty jsou navrženy tak, aby automatizovaly extrakci testovacích dat z Extent Reports v Jenkins a odeslaly tato data e-mailem jako součást nepřetržité integrační zpětnovazební smyčky. První důležitý příkaz je groovy.json.JsonSlurper, což je nezbytné pro analýzu dat JSON v prostředí Jenkins. To umožňuje skriptu efektivně zpracovávat odpovědi nebo soubory JSON, což je klíčové pro extrahování výsledků testů naformátovaných v JSON z Extent Reports. Dalším používaným klávesovým příkazem je new URL().text, který přistupuje k sestavě HTML zpráv o rozsahu hostované na Jenkins. Tento příkaz načte obsah HTML jako prostý text, což skriptu umožní získat potřebná data, jako jsou celkové testy, úspěšné a neúspěšné testy.

Extrakce dat je dále řízena pomocí regulárních výrazů k nalezení konkrétních vzorů v textu HTML, identifikujících čísla spojená s celkovými, úspěšnými a neúspěšnými testy. The jenkins.model.Jenkins.instance příkaz se pak použije k odkazování na aktuální Jenkinsovu instanci, která je nezbytná k načtení různých podrobností úlohy a programové konfiguraci nastavení. Po extrakci dat používá skript Transport.send(message) z JavaMail API k odeslání vytvořeného e-mailu. Tento příkaz je zásadní pro odesílání e-mailových upozornění s extrahovanými výsledky testů, což zajišťuje, že zúčastněné strany budou informovány o nejnovějších výsledcích testování přímo prostřednictvím e-mailu, čímž se prodlouží doba komunikace a odezvy ve vývojových cyklech.

Extrahování dat ze zpráv o rozsahu v Jenkins

Java a Groovy Scripting pro 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 pro vylepšení e-mailových upozornění v Jenkins

Využití Groovy v Jenkins Post-Build akcích

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)

Vylepšení automatického hlášení prostřednictvím Jenkinse

Implementace automatizované extrakce dat a e-mailových upozornění v rámci Jenkins pomocí Extent Reports výrazně optimalizuje proces kontinuální integrace (CI). Tato metodika nejen zajišťuje včasné aktualizace, ale také usnadňuje proaktivní řešení problémů tím, že zúčastněným stranám poskytuje okamžité výsledky testů. Tento proces využívá schopnosti Jenkinse k plánování a spouštění automatických testů přes noc, které jsou poté analyzovány, aby se extrahovaly klíčové metriky, jako je celkový počet testů, úspěšných a neúspěšných testů, přímo ze zpráv HTML generovaných aplikací Extent Reporter.

Tato automatická extrakce a reportování zjednodušuje mechanismus zpětné vazby, který je nezbytný pro agilní vývojová prostředí. Díky integraci Extent Reports s Jenkins mohou týmy lépe řídit výsledky testů a udržovat vysoké standardy kvality kódu prostřednictvím nepřetržitého monitorování a hodnocení. Tyto operace jsou zásadní pro udržení efektivního vývojového kanálu a pro zajištění toho, aby všichni členové týmu byli v souladu s nejnovějšími výsledky testování a stavem projektu.

Běžné otázky k integraci sestav Jenkins

  1. Jak nakonfiguruji Jenkins, aby po sestavení odeslal e-mail?
  2. Můžete to nakonfigurovat v akcích po sestavení konfigurace vaší úlohy pomocí možnosti Upozornění e-mailem.
  3. Co jsou zprávy o rozsahu v kontextu Jenkins?
  4. Extent Reports je open-source reportovací nástroj, který poskytuje interaktivní a podrobné reporty o automatických testech, které lze snadno integrovat do Jenkinsových kanálů.
  5. Může se Jenkins integrovat s jinými nástroji pro vytváření sestav kromě zpráv o rozsahu?
  6. Ano, Jenkins podporuje integraci s několika dalšími nástroji pro vytváření sestav, jako je JUnit, TestNG a další, pomocí příslušných pluginů.
  7. Jak extrahuji testovací data ze zprávy HTML v Jenkins?
  8. Obvykle používáte skriptování Groovy nebo Python v Jenkins k analýze obsahu HTML a extrahování požadovaných dat.
  9. Jaké jsou výhody automatických e-mailových upozornění v Jenkins?
  10. Automatizované e-maily poskytují okamžitou zpětnou vazbu o stavu sestavení a testování, pomáhají týmům rychleji řešit problémy a udržovat nepřetržité pracovní postupy nasazení.

Závěrečné myšlenky na automatizované Jenkins Reporting

Automatizace extrakce testovacích metrik z Extent Reports a jejich integrace do Jenkinsových e-mailových upozornění výrazně zlepšuje možnosti monitorování v rámci CI kanálu. Tento přístup umožňuje týmům dostávat včasné aktualizace o výsledcích testů, podporuje rychlé akce směřující k opravě selhání a vylepšení kódu. Zjednodušený proces nejen šetří čas, ale také optimalizuje alokaci zdrojů tím, že zajišťuje, že všechny zúčastněné strany jsou okamžitě informovány o stavu nočních sestavení, čímž je zachována nepřetržitá smyčka zpětné vazby a vývoje.