Przewodnik: wysyłaj dane raportu dotyczącego zakresu pocztą elektroniczną w Jenkins

Przewodnik: wysyłaj dane raportu dotyczącego zakresu pocztą elektroniczną w Jenkins
Przewodnik: wysyłaj dane raportu dotyczącego zakresu pocztą elektroniczną w Jenkins

Omówienie zakresu integracji raportowania

Integracja funkcji Extent Reporting z Jenkins na potrzeby zautomatyzowanych projektów Java zwiększa widoczność wyników testów, co jest kluczowe w środowiskach ciągłej integracji. Ta konfiguracja zazwyczaj obejmuje TestNG, Maven i Extent Reporter, zarządzane przez SureFire, co pozwala na nocne kompilacje i szczegółowe raportowanie.

Jednak częstym wyzwaniem jest wyodrębnienie określonych danych, takich jak liczba testów i współczynniki pozytywne/niezaliczone, z panelu HTML Extent Reporter w celu umieszczenia ich w powiadomieniach e-mail Jenkins. Wymaga to skryptu lub metody skutecznego analizowania tych szczegółów na podstawie treści HTML w celu automatycznego rozpowszechniania.

Komenda Opis
groovy.json.JsonSlurper Używany w Groovy do analizowania danych w formacie JSON, ułatwiając obsługę danych z plików JSON lub odpowiedzi.
new URL().text Tworzy nowy obiekt URL i pobiera zawartość w postaci tekstu, powszechnie używanego do odczytu danych bezpośrednio z zasobów sieciowych.
jenkins.model.Jenkins.instance Wzorzec Singleton umożliwiający dostęp do bieżącej działającej instancji Jenkinsa, umożliwiający manipulowanie konfiguracjami i ustawieniami zadań.
Thread.currentThread().executable Używany w potoku skryptowym Jenkinsa w celu uzyskania odniesienia do aktualnie uruchomionej kompilacji lub zadania, często w celu dynamicznej obsługi.
hudson.util.RemotingDiagnostics Umożliwia wykonywanie skryptów Groovy na zdalnych węzłach Jenkins, używanych głównie do celów diagnostycznych w skryptach.
Transport.send(message) Część API JavaMail służąca do wysyłania przygotowanej w skrypcie wiadomości e-mail, niezbędna dla systemów powiadomień.

Wyjaśnienie implementacji skryptu

Dostarczone skrypty mają na celu zautomatyzowanie wyodrębniania danych testowych z raportów Extent Reports w Jenkins i wysyłanie tych danych pocztą elektroniczną w ramach ciągłej pętli sprzężenia zwrotnego integracji. Pierwszym ważnym poleceniem jest groovy.json.JsonSlurper, który jest niezbędny do analizowania danych JSON w środowisku Jenkins. Dzięki temu skrypt może wydajnie obsługiwać odpowiedzi lub pliki w formacie JSON, co jest kluczowe dla wyodrębnienia wyników testów sformatowanych w formacie JSON z raportów zakresu. Innym używanym kluczowym poleceniem jest new URL().text, który uzyskuje dostęp do raportu HTML raportów zakresu hostowanych na platformie Jenkins. To polecenie pobiera zawartość HTML w postaci zwykłego tekstu, umożliwiając skryptowi pobranie potrzebnych danych, takich jak całkowita liczba testów, testy zaliczone i zakończone niepowodzeniem.

Ekstrakcją danych zarządza się dalej za pomocą wyrażeń regularnych w celu znalezienia określonych wzorców w tekście HTML, identyfikując liczby powiązane z testami całkowitymi, zaliczonymi i nieudanymi. The jenkins.model.Jenkins.instance polecenie jest następnie używane do odwoływania się do bieżącej instancji Jenkinsa, co jest niezbędne do pobrania różnych szczegółów zadania i programowego skonfigurowania ustawień. Po wyodrębnieniu danych skrypt używa Transport.send(message) z API JavaMail, aby wysłać skonstruowaną wiadomość e-mail. Polecenie to ma kluczowe znaczenie dla wysyłania powiadomień e-mail z wyodrębnionymi wynikami testów, zapewniając zainteresowanym stronom aktualizację najnowszych wyników testów bezpośrednio za pośrednictwem poczty elektronicznej, poprawiając w ten sposób komunikację i czas reakcji w cyklach rozwoju.

Wyodrębnianie danych z raportów zasięgu w Jenkins

Skrypty Java i Groovy dla 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)

Skrypt poprawiający powiadomienia e-mail w Jenkins

Wykorzystanie Groovy w akcjach Jenkinsa po kompilacji

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)

Udoskonalenia w automatycznym raportowaniu za pośrednictwem Jenkins

Wdrożenie w Jenkins automatycznej ekstrakcji danych i powiadomień e-mailowych przy użyciu raportów Extent znacznie optymalizuje proces ciągłej integracji (CI). Metodologia ta nie tylko zapewnia terminowe aktualizacje, ale także ułatwia proaktywne rozwiązywanie problemów, zapewniając zainteresowanym stronom natychmiastowe wyniki testów. Proces wykorzystuje możliwości Jenkinsa do planowania i uruchamiania automatycznych testów z dnia na dzień, które są następnie analizowane w celu wyodrębnienia kluczowych wskaźników, takich jak całkowita liczba testów, przejść i niepowodzeń, bezpośrednio z raportów HTML generowanych przez Extent Reporter.

Ta zautomatyzowana ekstrakcja i raportowanie usprawnia mechanizm informacji zwrotnej niezbędny w zwinnych środowiskach programistycznych. Integrując Extent Reports z Jenkinsem, zespoły mogą lepiej zarządzać wynikami testów i utrzymywać wysokie standardy jakości kodu poprzez ciągłe monitorowanie i ocenę. Operacje te mają kluczowe znaczenie dla utrzymania wydajnego przebiegu rozwoju i zapewnienia, że ​​wszyscy członkowie zespołu korzystają z najnowszych wyników testów i statusów projektów.

Często zadawane pytania dotyczące integracji raportowania Jenkins

  1. Jak skonfigurować Jenkinsa do wysyłania wiadomości e-mail po kompilacji?
  2. Można to skonfigurować w działaniach pokompilacyjnych w konfiguracji zadania, korzystając z opcji Powiadomienia e-mailem.
  3. Co to są raporty zasięgu w kontekście Jenkinsa?
  4. Extent Reports to narzędzie do raportowania typu open source, które zapewnia interaktywne i szczegółowe raporty dotyczące testów automatycznych, które można łatwo zintegrować z potokami Jenkins.
  5. Czy Jenkins można zintegrować z innymi narzędziami do raportowania poza raportami zasięgu?
  6. Tak, Jenkins obsługuje integrację z kilkoma innymi narzędziami do raportowania, takimi jak JUnit, TestNG i innymi, za pomocą odpowiednich wtyczek.
  7. Jak wyodrębnić dane testowe z raportu HTML w Jenkins?
  8. Zwykle używasz skryptów Groovy lub Python w Jenkins do analizowania treści HTML i wyodrębniania wymaganych danych.
  9. Jakie są zalety automatycznych powiadomień e-mail w Jenkins?
  10. Zautomatyzowane wiadomości e-mail zapewniają natychmiastową informację zwrotną na temat statusów kompilacji i testów, pomagając zespołom szybciej rozwiązywać problemy i utrzymywać ciągły przepływ pracy podczas wdrażania.

Końcowe przemyślenia na temat automatycznego raportowania Jenkinsa

Automatyzacja wyodrębniania metryk testowych z raportów zasięgu i integrowanie ich z powiadomieniami e-mail Jenkins znacznie zwiększa możliwości monitorowania w ramach potoku CI. Takie podejście umożliwia zespołom otrzymywanie aktualnych informacji o wynikach testów, promując szybkie działania mające na celu naprawienie błędów i ulepszenie kodu. Usprawniony proces nie tylko oszczędza czas, ale także optymalizuje alokację zasobów, zapewniając, że wszyscy interesariusze są natychmiast informowani o statusie kompilacji nocnych, utrzymując w ten sposób ciągłą pętlę informacji zwrotnej i rozwoju.