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 , 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 , 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 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 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.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)
Skrypt poprawiający powiadomienia e-mail w Jenkins
Wykorzystanie Groovy w akcjach Jenkinsa po kompilacji
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)
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.
- Jak skonfigurować Jenkinsa do wysyłania wiadomości e-mail po kompilacji?
- Można to skonfigurować w działaniach pokompilacyjnych w konfiguracji zadania, korzystając z opcji Powiadomienia e-mailem.
- Co to są raporty zasięgu w kontekście Jenkinsa?
- 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.
- Czy Jenkins można zintegrować z innymi narzędziami do raportowania poza raportami zasięgu?
- Tak, Jenkins obsługuje integrację z kilkoma innymi narzędziami do raportowania, takimi jak JUnit, TestNG i innymi, za pomocą odpowiednich wtyczek.
- Jak wyodrębnić dane testowe z raportu HTML w Jenkins?
- Zwykle używasz skryptów Groovy lub Python w Jenkins do analizowania treści HTML i wyodrębniania wymaganych danych.
- Jakie są zalety automatycznych powiadomień e-mail w Jenkins?
- 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.
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.