Tổng quan về tích hợp báo cáo mở rộng
Việc tích hợp Báo cáo phạm vi với Jenkins cho các dự án Java tự động sẽ nâng cao khả năng hiển thị kết quả thử nghiệm, điều này rất quan trọng đối với môi trường tích hợp liên tục. Thiết lập này thường bao gồm TestNG, Maven và Extent Reporter, được quản lý thông qua SureFire, cho phép tạo bản dựng hàng đêm và báo cáo chi tiết.
Tuy nhiên, một thách thức chung là trích xuất dữ liệu cụ thể như số lần kiểm tra và tỷ lệ đạt/không đạt từ bảng điều khiển HTML của Trình báo cáo mở rộng để đưa vào thông báo qua email của Jenkins. Điều này đòi hỏi một tập lệnh hoặc phương pháp để phân tích các chi tiết này một cách hiệu quả từ nội dung HTML để phổ biến tự động.
| Yêu cầu | Sự miêu tả |
|---|---|
| groovy.json.JsonSlurper | Được sử dụng trong Groovy để phân tích cú pháp dữ liệu có định dạng JSON, tạo điều kiện thuận lợi cho việc xử lý dữ liệu từ các tệp hoặc phản hồi JSON. |
| new URL().text | Tạo một đối tượng URL mới và tìm nạp nội dung dưới dạng văn bản, thường được sử dụng để đọc dữ liệu trực tiếp từ tài nguyên web. |
| jenkins.model.Jenkins.instance | Mẫu Singleton để truy cập phiên bản đang chạy hiện tại của Jenkins, cho phép thao tác các cấu hình và cài đặt công việc. |
| Thread.currentThread().executable | Được sử dụng trong quy trình theo kịch bản của Jenkins để tham chiếu đến bản dựng hoặc công việc hiện đang chạy, thường dùng để xử lý động. |
| hudson.util.RemotingDiagnostics | Cho phép thực thi tập lệnh Groovy trên các nút Jenkins từ xa, chủ yếu được sử dụng cho mục đích chẩn đoán trong tập lệnh. |
| Transport.send(message) | Một phần của API JavaMail được sử dụng để gửi thư email được chuẩn bị sẵn trong tập lệnh, cần thiết cho hệ thống thông báo. |
Giải thích triển khai tập lệnh
Các tập lệnh được cung cấp được thiết kế để tự động trích xuất dữ liệu thử nghiệm từ Báo cáo mở rộng trong Jenkins và gửi dữ liệu này qua email như một phần của vòng phản hồi tích hợp liên tục. Lệnh quan trọng đầu tiên là groovy.json.JsonSlurper, điều này rất cần thiết để phân tích cú pháp dữ liệu JSON trong môi trường Jenkins. Điều này cho phép tập lệnh xử lý các phản hồi hoặc tệp JSON một cách hiệu quả, điều này rất quan trọng để trích xuất kết quả kiểm tra được định dạng bằng JSON từ Báo cáo mở rộng. Một lệnh quan trọng khác được sử dụng là new URL().text, truy cập báo cáo HTML của Báo cáo mức độ được lưu trữ trên Jenkins. Lệnh này tìm nạp nội dung HTML dưới dạng văn bản thuần túy, cho phép tập lệnh trích xuất dữ liệu cần thiết như tổng số lần kiểm tra, kiểm tra đạt và không đạt.
Việc trích xuất dữ liệu được quản lý sâu hơn bằng cách sử dụng các biểu thức chính quy để tìm các mẫu cụ thể trong văn bản HTML, xác định các số liên quan đến các bài kiểm tra tổng, đạt và không đạt. Các jenkins.model.Jenkins.instance lệnh sau đó được sử dụng để tham chiếu phiên bản Jenkins hiện tại, cần thiết để tìm nạp các chi tiết công việc khác nhau và định cấu hình cài đặt theo chương trình. Đăng trích xuất dữ liệu, tập lệnh sử dụng Transport.send(message) từ API JavaMail để gửi email đã tạo. Lệnh này rất quan trọng để gửi thông báo qua email về kết quả kiểm tra được trích xuất, đảm bảo rằng các bên liên quan được cập nhật kết quả kiểm tra mới nhất trực tiếp qua email, từ đó nâng cao thời gian liên lạc và phản hồi trong chu kỳ phát triển.
Trích xuất dữ liệu từ các báo cáo mở rộng trong Jenkins
Tập lệnh Java và Groovy cho các đường dẫn Jenkins
import hudson.model.*import hudson.util.RemotingDiagnosticsimport groovy.json.JsonSlurperdef extractData() {def build = Thread.currentThread().executabledef reportUrl = "${build.getProject().url}${build.number}/HTML_20Report/index.html"def jenkinsConsole = new URL(reportUrl).textdef matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Total Tests:\\s*</span>(\\d+)</br>"def totalTests = matcher ? Integer.parseInt(matcher[0][1]) : 0matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Passed Tests:\\s*</span>(\\d+)</br>"def passedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Failed Tests:\\s*</span>(\\d+)</br>"def failedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0return [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)
Tập lệnh nâng cao thông báo email trong Jenkins
Sử dụng Groovy trong các hành động sau xây dựng của Jenkins
import groovy.json.JsonSlurperimport jenkins.model.Jenkinsimport javax.mail.Messageimport javax.mail.Transportimport javax.mail.internet.InternetAddressimport javax.mail.internet.MimeMessagedef fetchReportData() {def job = Jenkins.instance.getItemByFullName("YourJobName")def lastBuild = job.lastBuilddef reportUrl = "${lastBuild.url}HTML_20Report/index.html"new URL(reportUrl).withReader { reader ->def data = reader.textdef 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)
Những cải tiến trong Báo cáo tự động thông qua Jenkins
Việc triển khai trích xuất dữ liệu tự động và thông báo qua email trong Jenkins bằng cách sử dụng Báo cáo mở rộng sẽ tối ưu hóa đáng kể quy trình tích hợp liên tục (CI). Phương pháp này không chỉ đảm bảo cập nhật kịp thời mà còn tạo điều kiện giải quyết vấn đề một cách chủ động bằng cách cung cấp cho các bên liên quan kết quả kiểm tra ngay lập tức. Quá trình này tận dụng khả năng của Jenkins để lên lịch và chạy các thử nghiệm tự động qua đêm, sau đó được phân tích cú pháp để trích xuất các số liệu chính như tổng số lần thử nghiệm, đạt và không thành công trực tiếp từ các báo cáo HTML do Extent Reporter tạo ra.
Việc trích xuất và báo cáo tự động này hợp lý hóa cơ chế phản hồi cần thiết cho môi trường phát triển linh hoạt. Bằng cách tích hợp Báo cáo mức độ với Jenkins, các nhóm có thể quản lý kết quả thử nghiệm tốt hơn và duy trì tiêu chuẩn cao về chất lượng mã thông qua giám sát và đánh giá liên tục. Các hoạt động này rất quan trọng trong việc duy trì quy trình phát triển hiệu quả và đảm bảo rằng tất cả các thành viên trong nhóm đều phù hợp với các kết quả thử nghiệm và trạng thái dự án mới nhất.
Các câu hỏi thường gặp về tích hợp báo cáo Jenkins
- Làm cách nào để định cấu hình Jenkins gửi email sau khi xây dựng?
- Bạn có thể định cấu hình điều này trong các hành động sau xây dựng của cấu hình công việc của mình bằng cách sử dụng tùy chọn Thông báo qua email.
- Báo cáo mức độ trong bối cảnh của Jenkins là gì?
- Báo cáo mở rộng là một công cụ báo cáo nguồn mở cung cấp các báo cáo chi tiết và tương tác về các thử nghiệm tự động, dễ dàng tích hợp vào quy trình của Jenkins.
- Jenkins có thể tích hợp với các công cụ báo cáo khác ngoài Báo cáo mức độ không?
- Có, Jenkins hỗ trợ tích hợp với một số công cụ báo cáo khác như JUnit, TestNG, v.v. bằng cách sử dụng các plugin tương ứng.
- Làm cách nào để trích xuất dữ liệu thử nghiệm từ báo cáo HTML trong Jenkins?
- Bạn thường sử dụng tập lệnh Groovy hoặc Python trong Jenkins để phân tích nội dung HTML và trích xuất dữ liệu cần thiết.
- Lợi ích của thông báo email tự động trong Jenkins là gì?
- Email tự động cung cấp phản hồi ngay lập tức về trạng thái xây dựng và thử nghiệm, giúp các nhóm giải quyết vấn đề nhanh hơn và duy trì quy trình triển khai liên tục.
Suy nghĩ cuối cùng về báo cáo Jenkins tự động
Việc tự động trích xuất các số liệu kiểm tra từ Báo cáo mở rộng và tích hợp chúng vào thông báo qua email của Jenkins giúp tăng cường đáng kể khả năng giám sát trong quy trình CI. Cách tiếp cận này cho phép các nhóm nhận được thông tin cập nhật kịp thời về kết quả kiểm thử, thúc đẩy các hành động nhanh chóng nhằm sửa lỗi và cải thiện mã. Quy trình hợp lý hóa không chỉ tiết kiệm thời gian mà còn tối ưu hóa việc phân bổ nguồn lực bằng cách đảm bảo rằng tất cả các bên liên quan được thông báo kịp thời về trạng thái của các bản dựng hàng đêm, từ đó duy trì vòng phản hồi và phát triển liên tục.