Panduan: Mengirim Data Laporan Luas melalui Email di Jenkins

Groovy Scripting

Ikhtisar Integrasi Pelaporan Tingkat

Mengintegrasikan Extent Reporting dengan Jenkins untuk proyek Java otomatis meningkatkan visibilitas hasil pengujian, yang penting untuk lingkungan integrasi berkelanjutan. Penyiapan ini biasanya mencakup TestNG, Maven, dan Extent Reporter, yang dikelola melalui SureFire, memungkinkan pembuatan malam hari dan pelaporan mendetail.

Namun, tantangan yang umum adalah mengekstraksi data spesifik seperti jumlah pengujian dan rasio lulus/gagal dari dasbor HTML Extent Reporter untuk disertakan dalam notifikasi email Jenkins. Hal ini memerlukan skrip atau metode untuk menguraikan rincian ini secara efektif dari konten HTML untuk penyebaran otomatis.

Memerintah Keterangan
groovy.json.JsonSlurper Digunakan di Groovy untuk mengurai data berformat JSON, memfasilitasi penanganan data dari file atau respons JSON.
new URL().text Membuat objek URL baru dan mengambil konten sebagai teks, biasanya digunakan untuk membaca data langsung dari sumber daya web.
jenkins.model.Jenkins.instance Pola tunggal untuk mengakses instance Jenkins yang sedang berjalan, memungkinkan manipulasi konfigurasi dan pengaturan pekerjaan.
Thread.currentThread().executable Digunakan dalam alur skrip Jenkins untuk mendapatkan referensi ke build atau pekerjaan yang sedang berjalan, sering kali untuk penanganan dinamis.
hudson.util.RemotingDiagnostics Mengizinkan eksekusi skrip Groovy pada node Jenkins jarak jauh, terutama digunakan untuk tujuan diagnostik dalam skrip.
Transport.send(message) Bagian dari JavaMail API yang digunakan untuk mengirim pesan email yang disiapkan dalam skrip, penting untuk sistem notifikasi.

Penjelasan Implementasi Naskah

Skrip yang disediakan dirancang untuk mengotomatiskan ekstraksi data pengujian dari Extent Reports di Jenkins dan mengirimkan data ini melalui email sebagai bagian dari putaran umpan balik integrasi berkelanjutan. Perintah penting pertama adalah , yang penting untuk mengurai data JSON dalam lingkungan Jenkins. Hal ini memungkinkan skrip menangani respons atau file JSON secara efisien, yang penting untuk mengekstraksi hasil pengujian yang diformat dalam JSON dari Extent Reports. Perintah kunci lain yang digunakan adalah , yang mengakses laporan HTML dari Extent Reports yang dihosting di Jenkins. Perintah ini mengambil konten HTML sebagai teks biasa, memungkinkan skrip untuk mengambil data yang diperlukan seperti pengujian total, pengujian yang lulus, dan pengujian yang gagal.

Ekstraksi data dikelola lebih lanjut dengan menggunakan ekspresi reguler untuk menemukan pola spesifik dalam teks HTML, mengidentifikasi angka yang terkait dengan pengujian total, lulus, dan gagal. Itu perintah kemudian digunakan untuk mereferensikan instance Jenkins saat ini, yang diperlukan untuk mengambil berbagai detail pekerjaan dan mengonfigurasi pengaturan secara terprogram. Pasca ekstraksi data, skrip menggunakan dari JavaMail API untuk mengirim email yang dibuat. Perintah ini sangat penting untuk mengirimkan pemberitahuan email berisi hasil pengujian yang diekstrak, memastikan bahwa pemangku kepentingan mendapatkan informasi terbaru tentang hasil pengujian terbaru secara langsung melalui email, sehingga meningkatkan waktu komunikasi dan respons dalam siklus pengembangan.

Mengekstrak Data dari Laporan Luas di Jenkins

Skrip Java dan Groovy untuk 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)

Skrip untuk Meningkatkan Notifikasi Email di Jenkins

Memanfaatkan Groovy di Jenkins Post-Build Actions

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)

Peningkatan dalam Pelaporan Otomatis melalui Jenkins

Menerapkan ekstraksi data otomatis dan pemberitahuan email dalam Jenkins menggunakan Extent Reports secara signifikan mengoptimalkan proses integrasi berkelanjutan (CI). Metodologi ini tidak hanya memastikan pembaruan tepat waktu tetapi juga memfasilitasi penyelesaian masalah secara proaktif dengan memberikan hasil pengujian langsung kepada pemangku kepentingan. Proses ini memanfaatkan kemampuan Jenkins untuk menjadwalkan dan menjalankan pengujian otomatis dalam semalam, yang kemudian diuraikan untuk mengekstrak metrik utama seperti jumlah total pengujian, kelulusan, dan kegagalan langsung dari laporan HTML yang dihasilkan oleh Extent Reporter.

Ekstraksi dan pelaporan otomatis ini menyederhanakan mekanisme umpan balik yang penting untuk lingkungan pengembangan yang tangkas. Dengan mengintegrasikan Extent Reports dengan Jenkins, tim dapat mengelola hasil pengujian dengan lebih baik dan mempertahankan standar kualitas kode yang tinggi melalui pemantauan dan evaluasi yang berkelanjutan. Operasi ini sangat penting dalam menjaga jalur pengembangan yang efisien dan memastikan bahwa semua anggota tim selaras dengan hasil pengujian terbaru dan status proyek.

  1. Bagaimana cara mengkonfigurasi Jenkins untuk mengirim email setelah build?
  2. Anda dapat mengonfigurasi ini dalam tindakan pasca-pembuatan konfigurasi pekerjaan Anda, menggunakan opsi Pemberitahuan Email.
  3. Apa itu Extent Reports dalam konteks Jenkins?
  4. Extent Reports adalah alat pelaporan sumber terbuka yang menyediakan laporan interaktif dan terperinci tentang pengujian otomatis, yang mudah diintegrasikan ke dalam saluran Jenkins.
  5. Bisakah Jenkins berintegrasi dengan alat pelaporan lain selain Extent Reports?
  6. Ya, Jenkins mendukung integrasi dengan beberapa alat pelaporan lain seperti JUnit, TestNG, dan lainnya, menggunakan plugin masing-masing.
  7. Bagaimana cara mengekstrak data pengujian dari laporan HTML di Jenkins?
  8. Anda biasanya menggunakan skrip Groovy atau Python dalam Jenkins untuk mengurai konten HTML dan mengekstrak data yang diperlukan.
  9. Apa manfaat notifikasi email otomatis di Jenkins?
  10. Email otomatis memberikan masukan langsung mengenai status pembangunan dan pengujian, membantu tim mengatasi masalah dengan lebih cepat dan mempertahankan alur kerja penerapan yang berkelanjutan.

Mengotomatiskan ekstraksi metrik pengujian dari Extent Reports dan mengintegrasikannya ke dalam notifikasi email Jenkins secara signifikan meningkatkan kemampuan pemantauan dalam pipeline CI. Pendekatan ini memungkinkan tim menerima pembaruan tepat waktu tentang hasil pengujian, mendorong tindakan cepat untuk memperbaiki kegagalan dan meningkatkan kode. Proses yang disederhanakan ini tidak hanya menghemat waktu namun juga mengoptimalkan alokasi sumber daya dengan memastikan bahwa semua pemangku kepentingan segera mendapat informasi tentang status bangunan malam, sehingga menjaga umpan balik dan pengembangan yang berkelanjutan.