ガイド: Jenkins でエクステント レポート データを電子メールで送信する

ガイド: Jenkins でエクステント レポート データを電子メールで送信する
ガイド: Jenkins でエクステント レポート データを電子メールで送信する

エクステントレポート統合の概要

自動 Java プロジェクト向けにエクステント レポートを Jenkins と統合すると、継続的統合環境にとって重要なテスト結果の可視性が強化されます。通常、このセットアップには TestNG、Maven、および Extent Reporter が含まれており、SureFire を通じて管理され、夜間のビルドと詳細なレポートが可能になります。

ただし、一般的な課題は、Jenkins の電子メール通知に含めるために、Extent Reporter HTML ダッシュボードからテスト数や合格/不合格率などの特定のデータを抽出することです。これには、自動配布のために HTML コンテンツからこれらの詳細を効果的に解析するスクリプトまたはメソッドが必要です。

指示 説明
groovy.json.JsonSlurper Groovy で JSON 形式のデータを解析するために使用され、JSON ファイルまたは応答からのデータ処理が容易になります。
new URL().text 新しい URL オブジェクトを作成し、コンテンツをテキストとして取得します。これは通常、Web リソースからデータを直接読み取るために使用されます。
jenkins.model.Jenkins.instance 現在実行中の Jenkins インスタンスにアクセスするためのシングルトン パターン。これにより、ジョブの構成と設定を操作できます。
Thread.currentThread().executable Jenkins スクリプト化パイプラインで、現在実行中のビルドまたはジョブへの参照を取得するために使用され、多くの場合、動的処理のために使用されます。
hudson.util.RemotingDiagnostics リモート Jenkins ノード上で Groovy スクリプトを実行できるようにします。主にスクリプト内の診断目的で使用されます。
Transport.send(message) JavaMail API の一部は、スクリプトで準備された電子メール メッセージを送信するために使用され、通知システムに不可欠です。

スクリプト実装の説明

提供されるスクリプトは、Jenkins のエクステント レポートからのテスト データの抽出を自動化し、継続的統合フィードバック ループの一部としてこのデータを電子メールで送信するように設計されています。最初の重要なコマンドは groovy.json.JsonSlurperこれは、Jenkins 環境内で JSON データを解析するために不可欠です。これにより、スクリプトは JSON 応答またはファイルを効率的に処理できるようになり、エクステント レポートから JSON 形式のテスト結果を抽出するために重要になります。使用されるもう 1 つの重要なコマンドは次のとおりです。 new URL().text、Jenkins でホストされているエクステント レポートの HTML レポートにアクセスします。このコマンドは HTML コンテンツをプレーン テキストとしてフェッチし、スクリプトで合計テスト、合格、不合格のテストなどの必要なデータを収集できるようにします。

データの抽出は、正規表現を使用して HTML テキスト内の特定のパターンを検索し、合計テスト、合格テスト、および不合格テストに関連付けられた数値を識別することによってさらに管理されます。の jenkins.model.Jenkins.instance 次に、コマンドを使用して現在の Jenkins インスタンスを参照します。これは、さまざまなジョブの詳細を取得し、プログラムで設定を構成するために必要です。データ抽出後、スクリプトは使用します Transport.send(message) 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 による自動レポートの機能強化

エクステント レポートを使用して Jenkins 内に自動データ抽出と電子メール通知を実装すると、継続的インテグレーション (CI) プロセスが大幅に最適化されます。この方法論は、タイムリーな更新を保証するだけでなく、関係者にテスト結果を即時に提供することで、プロアクティブな問題解決を促進します。このプロセスでは、Jenkins の機能を活用して、自動テストを夜間にスケジュールして実行します。その後、解析されて、Extent Reporter によって生成された HTML レポートから、テストの総数、合格、失敗などの主要なメトリックが直接抽出されます。

この自動抽出とレポート作成により、アジャイル開発環境に不可欠なフィードバック メカニズムが合理化されます。エクステント レポートを Jenkins と統合することで、チームはテスト結果をより適切に管理し、継続的な監視と評価を通じて高水準のコード品質を維持できます。これらの操作は、効率的な開発パイプラインを維持し、すべてのチーム メンバーが最新のテスト結果とプロジェクトのステータスを確実に把握できるようにするために重要です。

Jenkins レポート統合に関するよくある質問

  1. ビルド後に電子メールを送信するように Jenkins を構成するにはどうすればよいですか?
  2. これは、ジョブ構成のビルド後のアクションで、「電子メール通知」オプションを使用して構成できます。
  3. Jenkins のコンテキストにおけるエクステント レポートとは何ですか?
  4. Extent Reports は、自動テストに関するインタラクティブで詳細なレポートを提供するオープンソースのレポート ツールで、Jenkins パイプラインに簡単に統合できます。
  5. Jenkins はエクステント レポート以外のレポート ツールと統合できますか?
  6. はい、Jenkins は、それぞれのプラグインを使用して、JUnit、TestNG などの他のいくつかのレポート ツールとの統合をサポートしています。
  7. Jenkins で HTML レポートからテスト データを抽出するにはどうすればよいですか?
  8. 通常、Jenkins 内で Groovy または Python スクリプトを使用して、HTML コンテンツを解析し、必要なデータを抽出します。
  9. Jenkins の自動電子メール通知にはどのような利点がありますか?
  10. 自動電子メールにより、ビルドとテストのステータスに関するフィードバックが即座に提供されるため、チームがより迅速に問題に対処し、継続的な展開ワークフローを維持できるようになります。

自動化された Jenkins レポートに関する最終的な考え

エクステント レポートからのテスト メトリクスの抽出を自動化し、これらを Jenkins の電子メール通知に統合することで、CI パイプライン内の監視機能が大幅に強化されます。このアプローチにより、チームはテスト結果に関する最新情報をタイムリーに受け取ることができ、障害の修正とコードの改善に向けた迅速なアクションが促進されます。合理化されたプロセスにより、時間が節約されるだけでなく、すべての関係者に夜間のビルドのステータスが即座に通知されるため、リソース割り当てが最適化され、フィードバックと開発の継続的なループが維持されます。