Útmutató: Jelentési adatok terjedelme küldése e-mailben a Jenkinsben

Groovy Scripting

A kiterjedt jelentéskészítési integráció áttekintése

Az Extent Reporting integrációja a Jenkins-szel az automatizált Java-projektekhez javítja a teszteredmények láthatóságát, ami elengedhetetlen a folyamatos integrációs környezetekben. Ez a beállítás általában a SureFire-en keresztül felügyelt TestNG-t, Maven-t és Extent Reportert tartalmazza, lehetővé téve az éjszakai összeállításokat és a részletes jelentéskészítést.

Gyakori kihívás azonban az, hogy az Extent Reporter HTML-irányítópultjáról speciális adatokat, például tesztszámokat és sikeres/sikertelenségi arányokat kinyernek a Jenkins e-mail értesítéseibe való felvétel céljából. Ehhez szükség van egy szkriptre vagy módszerre, amely hatékonyan elemzi ezeket a részleteket a HTML-tartalomból az automatikus terjesztéshez.

Parancs Leírás
groovy.json.JsonSlurper A Groovyban a JSON-formátumú adatok elemzésére használják, megkönnyítve a JSON-fájlokból vagy -válaszokból származó adatkezelést.
new URL().text Létrehoz egy új URL-objektumot, és lekéri a tartalmat szövegként, amelyet általában az adatok közvetlenül a webes erőforrásokból történő olvasására használnak.
jenkins.model.Jenkins.instance Singleton minta a Jenkins aktuális futó példányának eléréséhez, lehetővé téve a jobkonfigurációk és beállítások kezelését.
Thread.currentThread().executable A Jenkins parancsfájl-folyamatban használják, hogy hivatkozást kapjanak az éppen futó buildre vagy feladatra, gyakran dinamikus kezeléshez.
hudson.util.RemotingDiagnostics Lehetővé teszi Groovy-szkriptek végrehajtását távoli Jenkins-csomópontokon, elsősorban diagnosztikai célokra a szkripteken belül.
Transport.send(message) A szkriptben elkészített e-mail üzenetek küldésére használt JavaMail API része, amely elengedhetetlen az értesítési rendszerek számára.

A szkript megvalósításának magyarázata

A rendelkezésre bocsátott szkriptek a Jenkinsben található Extent Reports tesztadatok kinyerését automatizálják, és ezeket az adatokat e-mailben elküldik egy folyamatos integrációs visszacsatolási kör részeként. Az első fontos parancs az , ami elengedhetetlen a JSON-adatok Jenkins-környezeten belüli elemzéséhez. Ez lehetővé teszi a szkript számára, hogy hatékonyan kezelje a JSON-válaszokat vagy -fájlokat, ami kulcsfontosságú a JSON-formátumban formázott teszteredmények kinyeréséhez a kiterjedtségi jelentésekből. Egy másik használt billentyűparancs a , amely hozzáfér a Jenkins-en tárolt Extent Reports HTML-jelentéséhez. Ez a parancs egyszerű szövegként tölti le a HTML-tartalmat, lehetővé téve a szkript számára a szükséges adatok, például az összesített, sikeres és sikertelen tesztek összegyűjtését.

Az adatok kinyerését a továbbiakban reguláris kifejezések segítségével kezelik, hogy meghatározott mintákat találjanak a HTML-szövegben, azonosítva az összes, sikeres és sikertelen teszthez tartozó számokat. A A parancs ezután az aktuális Jenkins-példányra hivatkozik, amely szükséges a különböző feladatok részleteinek lekéréséhez és a beállítások programozott konfigurálásához. Az adatok kinyerése után a szkript használja a JavaMail API-ból az összeállított e-mail elküldéséhez. Ez a parancs kulcsfontosságú a kivont teszteredményeket tartalmazó e-mailes értesítések küldéséhez, biztosítva, hogy az érdekelt felek közvetlenül e-mailben értesüljenek a legfrissebb tesztelési eredményekről, ezáltal javítva a kommunikációs és válaszidőket a fejlesztési ciklusokban.

Adatok kinyerése a Jenkins kiterjedtségi jelentéseiből

Java és Groovy szkriptelés a Jenkins Pipelines-hez

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)

Szkript az e-mail értesítések javításához a Jenkinsben

Groovy felhasználása a Jenkins Post-Build Actions-ben

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)

Az automatizált jelentéskészítés továbbfejlesztése a Jenkins révén

Az automatizált adatkinyerés és az e-mail értesítések megvalósítása a Jenkins-en belül az Extent Reports használatával jelentősen optimalizálja a folyamatos integrációs (CI) folyamatot. Ez a módszer nemcsak az időszerű frissítéseket biztosítja, hanem elősegíti a proaktív problémamegoldást is azáltal, hogy azonnali teszteredményeket biztosít az érdekelt feleknek. A folyamat kihasználja a Jenkins képességeit az automatizált tesztek ütemezésére és egyik napról a másikra történő futtatására, amelyeket aztán elemzi, hogy az Extent Reporter által generált HTML-jelentésekből közvetlenül nyerje ki a kulcsfontosságú mutatókat, például a tesztek, sikeresek és hibák teljes számát.

Ez az automatizált kinyerés és jelentéskészítés egyszerűsíti az agilis fejlesztői környezetekhez nélkülözhetetlen visszacsatolási mechanizmust. Az Extent Reports Jenkins-szel való integrálásával a csapatok jobban kezelhetik a teszteredményeket, és a folyamatos megfigyelés és értékelés révén magas színvonalú kódminőséget tarthatnak fenn. Ezek a műveletek kritikus fontosságúak a hatékony fejlesztési folyamat fenntartásában, és annak biztosításában, hogy a csapat minden tagja igazodjon a legújabb tesztelési eredményekhez és projektállapotokhoz.

  1. Hogyan állíthatom be a Jenkins-t, hogy e-mailt küldjön a felépítés után?
  2. Ezt a feladatkonfiguráció utólagos összeállítási műveleteiben konfigurálhatja az E-mail értesítés opció használatával.
  3. Mit jelent az Extent Reports Jenkins kontextusában?
  4. Az Extent Reports egy nyílt forráskódú jelentéskészítő eszköz, amely interaktív és részletes jelentéseket biztosít az automatizált tesztekről, és könnyen integrálható a Jenkins-folyamatokhoz.
  5. Integrálható-e a Jenkins más jelentéskészítő eszközökkel az Extent Reports mellett?
  6. Igen, a Jenkins támogatja az integrációt számos más jelentéskészítő eszközzel, mint például a JUnit, a TestNG és még sok más, a megfelelő beépülő modulok használatával.
  7. Hogyan nyerhetek ki tesztadatokat egy HTML-jelentésből a Jenkinsben?
  8. Általában Groovy vagy Python szkripteket használ a Jenkins-en belül a HTML-tartalom elemzésére és a szükséges adatok kinyerésére.
  9. Milyen előnyei vannak a Jenkins automatizált e-mail értesítéseinek?
  10. Az automatizált e-mailek azonnali visszajelzést adnak a felépítési és tesztelési állapotokról, segítve a csapatokat a problémák gyorsabb megoldásában és a folyamatos üzembe helyezési munkafolyamatok fenntartásában.

Az Extent Reports tesztmetrikák kinyerésének automatizálása és ezeknek a Jenkins e-mail értesítéseibe való integrálása jelentősen javítja a CI-folyamat megfigyelési képességeit. Ez a megközelítés lehetővé teszi a csapatok számára, hogy időben frissítéseket kapjanak a teszteredményekről, elősegítve a hibák kijavítására és a kód javítására irányuló gyors intézkedéseket. Az egyszerűsített folyamat nemcsak időt takarít meg, hanem optimalizálja az erőforrások elosztását is azáltal, hogy minden érdekelt fél azonnali tájékoztatást kap az éjszakai építmények állapotáról, így fenntartva a folyamatos visszacsatolási és fejlesztési kört.