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 , 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 , 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 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 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.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)
Skript pro vylepšení e-mailových upozornění v Jenkins
Využití Groovy v Jenkins Post-Build akcích
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)
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.
- Jak nakonfiguruji Jenkins, aby po sestavení odeslal e-mail?
- Můžete to nakonfigurovat v akcích po sestavení konfigurace vaší úlohy pomocí možnosti Upozornění e-mailem.
- Co jsou zprávy o rozsahu v kontextu Jenkins?
- 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ů.
- Může se Jenkins integrovat s jinými nástroji pro vytváření sestav kromě zpráv o rozsahu?
- 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ů.
- Jak extrahuji testovací data ze zprávy HTML v Jenkins?
- Obvykle používáte skriptování Groovy nebo Python v Jenkins k analýze obsahu HTML a extrahování požadovaných dat.
- Jaké jsou výhody automatických e-mailových upozornění v Jenkins?
- 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í.
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.