Kılavuz: Kapsam Raporu Verilerini Jenkins'te E-postayla Gönderin

Groovy Scripting

Kapsam Raporlama Entegrasyonuna Genel Bakış

Otomatik Java projeleri için Kapsam Raporlamanın Jenkins ile entegre edilmesi, sürekli entegrasyon ortamları için çok önemli olan test sonuçlarının görünürlüğünü artırır. Bu kurulum genellikle SureFire aracılığıyla yönetilen TestNG, Maven ve Extent Reporter'ı içerir ve gecelik derlemelere ve ayrıntılı raporlamaya olanak tanır.

Ancak, Jenkins e-posta bildirimlerine dahil edilmek üzere Extent Reporter HTML kontrol panelinden test sayıları ve başarılı/başarısız oranları gibi belirli verilerin çıkarılması yaygın bir zorluktur. Bu, otomatik dağıtım için bu ayrıntıları HTML içeriğinden etkili bir şekilde ayrıştıracak bir komut dosyası veya yöntem gerektirir.

Emretmek Tanım
groovy.json.JsonSlurper JSON formatlı verileri ayrıştırmak için Groovy'de kullanılır ve JSON dosyalarından veya yanıtlarından veri işlenmesini kolaylaştırır.
new URL().text Yeni bir URL nesnesi oluşturur ve içeriği, genellikle doğrudan web kaynaklarından veri okumak için kullanılan metin olarak getirir.
jenkins.model.Jenkins.instance Tekil desen, iş yapılandırmalarının ve ayarlarının değiştirilmesine olanak tanıyan, Jenkins'in geçerli çalışan örneğine erişim sağlar.
Thread.currentThread().executable Jenkins'in betikli işlem hattında, genellikle dinamik işleme amacıyla, halihazırda çalışmakta olan yapıya veya işe referans almak için kullanılır.
hudson.util.RemotingDiagnostics Groovy komut dosyalarının, öncelikle komut dosyaları içinde tanılama amacıyla kullanılan uzak Jenkins düğümlerinde yürütülmesine izin verir.
Transport.send(message) Bildirim sistemleri için gerekli olan, komut dosyasında hazırlanmış bir e-posta mesajı göndermek için kullanılan JavaMail API'nin bir parçası.

Komut Dosyası Uygulama Açıklaması

Sağlanan komut dosyaları, Jenkins'teki Kapsam Raporlarından test verilerinin çıkarılmasını otomatikleştirmek ve bu verileri sürekli entegrasyon geri bildirim döngüsünün bir parçası olarak e-posta yoluyla göndermek için tasarlanmıştır. İlk önemli komut JSON verilerinin Jenkins ortamında ayrıştırılması için gereklidir. Bu, betiğin JSON yanıtlarını veya dosyalarını verimli bir şekilde işlemesine olanak tanır; bu, JSON'da biçimlendirilmiş test sonuçlarının Kapsam Raporlarından çıkarılması için çok önemlidir. Kullanılan diğer bir tuş komutu ise Jenkins'te barındırılan Kapsam Raporlarının HTML raporuna erişen. Bu komut, HTML içeriğini düz metin olarak getirerek betiğin toplam testler, başarılı ve başarısız testler gibi gerekli verileri toplamasına olanak tanır.

Verilerin çıkarılması, HTML metninde belirli kalıpları bulmak için normal ifadeler kullanılarak, toplam, başarılı ve başarısız testlerle ilişkili sayıların tanımlanmasıyla daha da yönetilir. komutu daha sonra çeşitli iş ayrıntılarını getirmek ve ayarları programlı olarak yapılandırmak için gerekli olan mevcut Jenkins örneğine referans vermek için kullanılır. Veri çıkarma sonrası, komut dosyası kullanır Oluşturulan e-postayı göndermek için JavaMail API'sinden. Bu komut, çıkarılan test sonuçlarıyla birlikte e-posta bildirimleri göndermek, paydaşların en son test sonuçlarıyla doğrudan e-posta yoluyla güncellenmesini sağlamak ve böylece geliştirme döngülerinde iletişim ve yanıt sürelerini artırmak için çok önemlidir.

Jenkins'teki Kapsam Raporlarından Veri Çıkarma

Jenkins Pipelines için Java ve Groovy Komut Dosyaları

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'te E-posta Bildirimlerini Geliştirmeye Yönelik Komut Dosyası

Jenkins'in Yapım Sonrası Eylemlerinde Groovy'yi Kullanmak

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 aracılığıyla Otomatik Raporlamada İyileştirmeler

Kapsam Raporları kullanılarak Jenkins'te otomatik veri çıkarma ve e-posta bildirimlerinin uygulanması, sürekli entegrasyon (CI) sürecini önemli ölçüde optimize eder. Bu metodoloji yalnızca zamanında güncellemeler sağlamakla kalmaz, aynı zamanda paydaşlara anında test sonuçları sağlayarak proaktif sorun çözümünü de kolaylaştırır. Süreç, Jenkins'in otomatik testleri gece boyunca planlama ve çalıştırma yeteneklerini kullanır; bunlar daha sonra doğrudan Extent Reporter tarafından oluşturulan HTML raporlarından toplam test, başarılı ve başarısızlık sayısı gibi önemli ölçümleri çıkarmak için ayrıştırılır.

Bu otomatik çıkarma ve raporlama, çevik geliştirme ortamları için gerekli olan geri bildirim mekanizmasını kolaylaştırır. Ekipler, Kapsam Raporlarını Jenkins ile entegre ederek test sonuçlarını daha iyi yönetebilir ve sürekli izleme ve değerlendirme yoluyla yüksek kod kalitesi standartlarını koruyabilir. Bu operasyonlar, verimli bir geliştirme hattının sürdürülmesi ve tüm ekip üyelerinin en son test sonuçları ve proje durumlarıyla uyumlu olmasını sağlamak açısından kritik öneme sahiptir.

  1. Jenkins'i derlemeden sonra e-posta gönderecek şekilde nasıl yapılandırabilirim?
  2. Bunu, E-posta Bildirimi seçeneğini kullanarak iş yapılandırmanızın oluşturma sonrası eylemlerinde yapılandırabilirsiniz.
  3. Jenkins bağlamında Kapsam Raporları nedir?
  4. Kapsam Raporları, otomatik testlerle ilgili etkileşimli ve ayrıntılı raporlar sağlayan, Jenkins işlem hatlarına kolayca entegre edilebilen açık kaynaklı bir raporlama aracıdır.
  5. Jenkins, Kapsam Raporlarının yanı sıra diğer raporlama araçlarıyla da entegre olabilir mi?
  6. Evet, Jenkins, ilgili eklentileri kullanarak JUnit, TestNG ve daha fazlası gibi diğer birçok raporlama aracıyla entegrasyonu destekler.
  7. Jenkins'te bir HTML raporundan test verilerini nasıl çıkarabilirim?
  8. HTML içeriğini ayrıştırmak ve gerekli verileri çıkarmak için genellikle Jenkins'te Groovy veya Python komut dosyalarını kullanırsınız.
  9. Jenkins'te otomatik e-posta bildirimlerinin faydaları nelerdir?
  10. Otomatik e-postalar, oluşturma ve test durumları hakkında anında geri bildirim sağlayarak ekiplerin sorunları daha hızlı çözmesine ve dağıtım iş akışlarını sürekli sürdürmesine yardımcı olur.

Kapsam Raporlarından test metriklerinin çıkarılmasının otomatikleştirilmesi ve bunların Jenkins e-posta bildirimlerine entegre edilmesi, bir CI hattındaki izleme yeteneklerini önemli ölçüde artırır. Bu yaklaşım, ekiplerin test sonuçlarıyla ilgili güncellemeleri zamanında almasına olanak tanıyarak hataları düzeltmeye ve kodu iyileştirmeye yönelik hızlı eylemleri teşvik eder. Kolaylaştırılmış süreç yalnızca zamandan tasarruf sağlamakla kalmıyor, aynı zamanda tüm paydaşların gece yapılan inşaatların durumu hakkında anında bilgi almasını sağlayarak kaynak tahsisini de optimize ediyor ve böylece sürekli bir geri bildirim ve geliştirme döngüsünü sürdürüyor.