가이드: Jenkins에서 이메일을 통해 범위 보고서 데이터 보내기

가이드: Jenkins에서 이메일을 통해 범위 보고서 데이터 보내기
가이드: Jenkins에서 이메일을 통해 범위 보고서 데이터 보내기

범위 보고 통합 개요

자동화된 Java 프로젝트를 위해 Jenkins와 Extent Reporting을 통합하면 지속적인 통합 환경에 중요한 테스트 결과의 가시성이 향상됩니다. 이 설정에는 일반적으로 SureFire를 통해 관리되는 TestNG, Maven 및 Extent Reporter가 포함되어 야간 빌드 및 자세한 보고가 가능합니다.

그러나 일반적인 과제는 Jenkins 이메일 알림에 포함하기 위해 Extent Reporter HTML 대시보드에서 테스트 횟수 및 합격/실패 비율과 같은 특정 데이터를 추출하는 것입니다. 이를 위해서는 자동 배포를 위해 HTML 콘텐츠에서 이러한 세부 정보를 효과적으로 구문 분석하는 스크립트나 방법이 필요합니다.

명령 설명
groovy.json.JsonSlurper Groovy에서 JSON 형식 데이터를 구문 분석하여 JSON 파일 또는 응답의 데이터 처리를 용이하게 하는 데 사용됩니다.
new URL().text 새 URL 객체를 생성하고 콘텐츠를 웹 리소스에서 직접 데이터를 읽는 데 일반적으로 사용되는 텍스트로 가져옵니다.
jenkins.model.Jenkins.instance 현재 실행 중인 Jenkins 인스턴스에 액세스하여 작업 구성 및 설정을 조작할 수 있는 싱글톤 패턴입니다.
Thread.currentThread().executable Jenkins 스크립트 파이프라인에서 현재 실행 중인 빌드 또는 작업에 대한 참조를 가져오는 데 사용되며, 종종 동적 처리를 위해 사용됩니다.
hudson.util.RemotingDiagnostics 주로 스크립트 내에서 진단 목적으로 사용되는 원격 Jenkins 노드에서 Groovy 스크립트를 실행할 수 있습니다.
Transport.send(message) 알림 시스템에 필수적인 스크립트로 준비된 이메일 메시지를 보내는 데 사용되는 JavaMail API의 일부입니다.

스크립트 구현 설명

제공된 스크립트는 Jenkins의 Extent Reports에서 테스트 데이터 추출을 자동화하고 지속적인 통합 피드백 루프의 일부로 이 데이터를 이메일을 통해 전송하도록 설계되었습니다. 첫 번째 중요한 명령은 groovy.json.JsonSlurper이는 Jenkins 환경 내에서 JSON 데이터를 구문 분석하는 데 필수적입니다. 이를 통해 스크립트는 JSON 응답 또는 파일을 효율적으로 처리할 수 있으며, Extent Reports에서 JSON 형식의 테스트 결과를 추출하는 데 중요합니다. 사용되는 또 다른 주요 명령은 다음과 같습니다. new URL().text, Jenkins에서 호스팅되는 Extent Reports의 HTML 보고서에 액세스합니다. 이 명령은 HTML 콘텐츠를 일반 텍스트로 가져오므로 스크립트가 총 테스트, 통과 및 실패한 테스트와 같은 필요한 데이터를 스크랩할 수 있습니다.

데이터 추출은 정규식을 사용하여 HTML 텍스트에서 특정 패턴을 찾아 전체 테스트, 통과 및 실패한 테스트와 관련된 숫자를 식별함으로써 추가로 관리됩니다. 그만큼 jenkins.model.Jenkins.instance 그런 다음 명령을 사용하여 현재 Jenkins 인스턴스를 참조합니다. 이는 다양한 작업 세부 정보를 가져오고 프로그래밍 방식으로 설정을 구성하는 데 필요합니다. 데이터 추출 후 스크립트는 다음을 사용합니다. JavaMail API에서 구성된 이메일을 보냅니다. 이 명령은 추출된 테스트 결과가 포함된 이메일 알림을 보내는 데 중요하며, 이해관계자가 이메일을 통해 직접 최신 테스트 결과로 업데이트되도록 보장하여 개발 주기에서 의사소통 및 응답 시간을 향상시킵니다.

Jenkins의 범위 보고서에서 데이터 추출

Jenkins 파이프라인을 위한 Java 및 Groovy 스크립팅

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에서 이메일 알림을 향상시키는 스크립트

Jenkins 빌드 후 작업에서 Groovy 활용

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를 통한 자동 보고 기능 향상

Extent Reports를 사용하여 Jenkins 내에서 자동화된 데이터 추출 및 이메일 알림을 구현하면 CI(지속적 통합) 프로세스가 크게 최적화됩니다. 이 방법론은 시기적절한 업데이트를 보장할 뿐만 아니라 이해관계자에게 즉각적인 테스트 결과를 제공함으로써 사전 예방적인 문제 해결을 촉진합니다. 이 프로세스는 Jenkins의 기능을 활용하여 밤새 자동화된 테스트를 예약하고 실행한 다음 구문 분석하여 Extent Reporter가 생성한 HTML 보고서에서 직접 총 테스트 수, 통과 및 실패와 같은 주요 지표를 추출합니다.

이러한 자동화된 추출 및 보고는 민첩한 개발 환경에 필수적인 피드백 메커니즘을 간소화합니다. Extent Reports를 Jenkins와 통합함으로써 팀은 지속적인 모니터링과 평가를 통해 테스트 결과를 더 잘 관리하고 높은 수준의 코드 품질을 유지할 수 있습니다. 이러한 작업은 효율적인 개발 파이프라인을 유지하고 모든 팀 구성원이 최신 테스트 결과 및 프로젝트 상태에 부합하도록 보장하는 데 중요합니다.

Jenkins 보고 통합에 대한 일반적인 질문

  1. 빌드 후 이메일을 보내도록 Jenkins를 어떻게 구성합니까?
  2. 이메일 알림 옵션을 사용하여 작업 구성의 빌드 후 작업에서 이를 구성할 수 있습니다.
  3. Jenkins의 맥락에서 범위 보고서란 무엇입니까?
  4. Extent Reports는 자동화된 테스트에 대한 자세한 대화형 보고서를 제공하고 Jenkins 파이프라인에 쉽게 통합되는 오픈 소스 보고 도구입니다.
  5. Jenkins는 Extent Reports 외에 다른 보고 도구와 통합할 수 있나요?
  6. 예, Jenkins는 해당 플러그인을 사용하여 JUnit, TestNG 등과 같은 다른 여러 보고 도구와의 통합을 지원합니다.
  7. Jenkins의 HTML 보고서에서 테스트 데이터를 어떻게 추출합니까?
  8. 일반적으로 Jenkins 내에서 Groovy 또는 Python 스크립팅을 사용하여 HTML 콘텐츠를 구문 분석하고 필요한 데이터를 추출합니다.
  9. Jenkins의 자동 이메일 알림의 이점은 무엇입니까?
  10. 자동화된 이메일은 빌드 및 테스트 상태에 대한 즉각적인 피드백을 제공하여 팀이 문제를 더 빠르게 해결하고 지속적인 배포 워크플로를 유지하는 데 도움이 됩니다.

자동화된 Jenkins 보고에 대한 최종 생각

Extent Reports에서 테스트 지표 추출을 자동화하고 이를 Jenkins 이메일 알림에 통합하면 CI 파이프라인 내 모니터링 기능이 크게 향상됩니다. 이 접근 방식을 통해 팀은 테스트 결과에 대한 시기적절한 업데이트를 받아 오류를 수정하고 코드를 개선하기 위한 신속한 조치를 취할 수 있습니다. 간소화된 프로세스는 시간을 절약할 뿐만 아니라 모든 이해관계자에게 야간 빌드 상태에 대한 즉각적인 정보를 제공하여 피드백과 개발의 지속적인 루프를 유지함으로써 리소스 할당을 최적화합니다.