Руководство: отправка данных отчета об объеме по электронной почте в Jenkins

Groovy Scripting

Обзор интеграции отчетов об объемах

Интеграция отчетов об экстенте с Jenkins для автоматизированных проектов Java повышает наглядность результатов тестирования, что крайне важно для сред непрерывной интеграции. Эта установка обычно включает TestNG, Maven и Extent Reporter, управляемые через SureFire, что позволяет создавать ночные сборки и создавать подробные отчеты.

Однако общей проблемой является извлечение конкретных данных, таких как количество тестов и соотношение «пройдено/не пройдено», из HTML-панели Extent Reporter для включения в уведомления Jenkins по электронной почте. Для этого требуется сценарий или метод для эффективного анализа этих деталей из содержимого HTML для автоматического распространения.

Команда Описание
groovy.json.JsonSlurper Используется в Groovy для анализа данных в формате JSON, что упрощает обработку данных из файлов или ответов JSON.
new URL().text Создает новый объект URL-адреса и извлекает содержимое в виде текста, что обычно используется для чтения данных непосредственно из веб-ресурсов.
jenkins.model.Jenkins.instance Шаблон Singleton для доступа к текущему работающему экземпляру Jenkins, позволяющий манипулировать конфигурациями и настройками заданий.
Thread.currentThread().executable Используется в конвейере сценариев Jenkins для получения ссылки на текущую сборку или задание, часто для динамической обработки.
hudson.util.RemotingDiagnostics Позволяет выполнять сценарии Groovy на удаленных узлах Jenkins, которые в основном используются в целях диагностики внутри сценариев.
Transport.send(message) Часть API JavaMail, используемая для отправки сообщения электронной почты, подготовленного в сценарии, необходимого для систем уведомлений.

Объяснение реализации скрипта

Предоставленные сценарии предназначены для автоматизации извлечения данных тестирования из отчетов Extent Reports в Jenkins и отправки этих данных по электронной почте в рамках цикла обратной связи непрерывной интеграции. Первая важная команда: , что необходимо для анализа данных JSON в среде Jenkins. Это позволяет сценарию эффективно обрабатывать ответы или файлы JSON, что крайне важно для извлечения результатов теста в формате JSON из отчетов об экстенте. Другая используемая ключевая команда: , который обращается к HTML-отчету Extent Reports, размещенному в Jenkins. Эта команда извлекает содержимое HTML в виде обычного текста, позволяя сценарию собирать необходимые данные, такие как общее количество тестов, пройденные и неудавшиеся тесты.

Извлечение данных дополнительно управляется с помощью регулярных выражений для поиска определенных шаблонов в тексте HTML, определяя числа, связанные с общим количеством, пройденными и неудавшимися тестами. Затем команда используется для ссылки на текущий экземпляр Jenkins, который необходим для получения различных сведений о задании и программной настройки параметров. После извлечения данных скрипт использует из API JavaMail для отправки созданного электронного письма. Эта команда имеет решающее значение для отправки уведомлений по электронной почте с извлеченными результатами тестирования, гарантируя, что заинтересованные стороны будут в курсе последних результатов тестирования непосредственно по электронной почте, тем самым увеличивая время связи и ответа в циклах разработки.

Извлечение данных из отчетов об экстентах в Jenkins

Java и Groovy-скрипты для конвейеров Jenkins

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)

Скрипт для улучшения уведомлений по электронной почте в Jenkins

Использование Groovy в действиях Jenkins после сборки

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)

Улучшения в автоматизированной отчетности через Jenkins

Внедрение автоматического извлечения данных и уведомлений по электронной почте в Jenkins с помощью Extent Reports значительно оптимизирует процесс непрерывной интеграции (CI). Эта методология не только обеспечивает своевременное обновление, но и способствует упреждающему решению проблем, предоставляя заинтересованным сторонам немедленные результаты испытаний. В этом процессе используются возможности Jenkins по планированию и запуску автоматических тестов в ночное время, которые затем анализируются для извлечения ключевых показателей, таких как общее количество тестов, проходов и сбоев, непосредственно из отчетов HTML, созданных Extent Reporter.

Такое автоматическое извлечение данных и создание отчетов упрощают механизм обратной связи, необходимый для сред гибкой разработки. Интегрируя отчеты об экстенте с Jenkins, команды могут лучше управлять результатами тестирования и поддерживать высокие стандарты качества кода посредством постоянного мониторинга и оценки. Эти операции имеют решающее значение для поддержания эффективного конвейера разработки и обеспечения того, чтобы все члены команды были в курсе последних результатов тестирования и статусов проектов.

  1. Как настроить Jenkins для отправки электронного письма после сборки?
  2. Вы можете настроить это в действиях после сборки конфигурации вашего задания, используя опцию «Уведомление по электронной почте».
  3. Что такое отчеты об экстенте в контексте Jenkins?
  4. Extent Reports — это инструмент отчетности с открытым исходным кодом, который предоставляет интерактивные и подробные отчеты об автоматических тестах, легко интегрируемые в конвейеры Jenkins.
  5. Может ли Jenkins интегрироваться с другими инструментами отчетности, кроме Extent Reports?
  6. Да, Jenkins поддерживает интеграцию с несколькими другими инструментами отчетности, такими как JUnit, TestNG и другими, с использованием соответствующих плагинов.
  7. Как извлечь тестовые данные из отчета HTML в Jenkins?
  8. Обычно вы используете сценарии Groovy или Python в Jenkins для анализа содержимого HTML и извлечения необходимых данных.
  9. Каковы преимущества автоматических уведомлений по электронной почте в Jenkins?
  10. Автоматизированные электронные письма обеспечивают немедленную обратную связь о статусах сборки и тестирования, помогая командам быстрее решать проблемы и поддерживать непрерывные рабочие процессы развертывания.

Автоматизация извлечения показателей тестирования из отчетов об экстенте и интеграция их в уведомления по электронной почте Jenkins значительно расширяют возможности мониторинга в конвейере CI. Такой подход позволяет командам получать своевременную информацию о результатах тестирования, способствуя быстрым действиям по устранению сбоев и улучшению кода. Оптимизированный процесс не только экономит время, но и оптимизирует распределение ресурсов, обеспечивая оперативное информирование всех заинтересованных сторон о статусе ночных сборок, поддерживая таким образом непрерывный цикл обратной связи и разработки.