2012-01-05 37 views
5

Làm cách nào để hiển thị kết quả từ Android Lint trong Jenkins, ví dụ: như cảnh báo? Tôi muốn duyệt các cảnh báo từ GUI của Jenkins, giống như cảnh báo trình biên dịch và cảnh báo PMD/Checkstyle.Hiển thị kết quả Android Lint trong Jenkins

Kết quả của công việc Jenkins là một cái gì đó như thế này:

[exec] 
[exec] Scanning org.digitalcure.ccnf.app: ..........Incorrect detector reported disabled issue TooManyViews 
[exec] Incorrect detector reported disabled issue TooManyViews 
[exec] ... 
[exec] 
[exec] Scanning org.digitalcure.android.common: ... 
[exec] res/values/strings.xml: Warning: The resource R.string.display_unit_abc appears to be unused [UnusedResources] 
[exec] res/values/strings.xml: Warning: The resource R.string.edit_error_abc appears to be unused [UnusedResources] 
[exec] Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder] 
[exec] 
[exec] 0 errors, 3 warnings 

Android Lint có thể tạo một tập tin XML quá, nhưng tôi sợ rằng không có Jenkins cắm có khả năng phân tích các tập tin. Hay tôi đang thiếu một cái gì đó?

+2

Vâng, thật khó khăn vì định dạng XML Lint không tương thích với các công cụ Java tương tự khác. Tôi đã làm việc trên một plugin Jenkins để phân tích các kết quả Lint. –

+0

Christopher, một plug-in Android Lint cho Jenkins sẽ rất hữu ích. Dù sao, với sự giúp đỡ của Pavol, tôi đã giải quyết được vấn đề của mình. Vui lòng đăng nhận xét khi plugin có sẵn để thử nghiệm. Cảm ơn bạn! – stefan222

Trả lời

3

Pavol, cảm ơn bạn rất nhiều vì cảm hứng của bạn! Thật không may regexp/script của bạn không làm việc cho tôi, nhưng đó là một điểm khởi đầu rất tốt để điều tra thêm. Đây là những gì làm việc cho cấu hình của tôi:

Tên: Android Lint Parser

biểu thức chính quy: ([^\s]*:)?([^ ]*):\s+(.*)\[(.*)\]$

kịch bản Groovy:

import hudson.plugins.warnings.parser.Warning; 
import hudson.plugins.analysis.util.model.Priority; 

String fileName = matcher.group(1); 
String lineNumber = ""; 
String priority = matcher.group(2); 
String message = matcher.group(3); 
String category = matcher.group(4); 

if (fileName == null) { 
    fileName = "(no file)"; 
} else { 
    int idx = fileName.indexOf(':'); 
    if (idx > -1) { 
    lineNumber = fileName.substring(idx + 1, fileName.size()); 
    fileName = fileName.substring(0, idx); 

    int idx2 = lineNumber.indexOf(':'); 
    if (idx2 > -1) { 
     lineNumber = lineNumber.substring(0, idx2); 
    } 

    idx2 = lineNumber.indexOf(' '); 
    if (idx2 > -1) { 
     lineNumber = lineNumber.substring(0, idx2); 
    } 
    } 
} 

return new Warning(fileName, lineNumber.size() > 0 ? Integer.parseInt(lineNumber) : 0, "Android Lint Parser", category, message, priority.equals("Error") ? Priority.HIGH : Priority.NORMAL); 
0

Trong plugin cảnh báo biên dịch từ một số phiên bản, bạn có thể tạo trình phân tích cú pháp từ trang cấu hình của jenkins bằng cách sử dụng kịch bản lệnh regexp và groovy. Tôi tạo ra một cho lint tôi chạy như là kịch bản shell với đầu ra cho một số tập tin.

biểu thức chính quy: ^\s*([^ ]*): ([^ ]*):\s*(.*)\[(.*)\]$

kịch bản Groovy:

import hudson.plugins.warnings.parser.Warning; 
import hudson.plugins.analysis.util.model.Priority; 

String fileName = matcher.group(1) 
String lineNumber = ""; //matcher.group(1) 
String priority = matcher.group(2) 
String message = matcher.group(3) 
String category = matcher.group(4) 
int idx = fileName.indexOf(':'); 
if (idx > -1) { 
    lineNumber = fileName.substring(idx+1,fileName.size()); 
    fileName = fileName.substring(0,idx); 
} 

return new Warning(fileName, lineNumber.size() > 0 ? Integer.parseInt(lineNumber) : 0, "Android Lint Parser", category, message, priority.equals("Error") ? Priority.HIGH : Priority.NORMAL); 
7

Jenkins bây giờ có Android Lint Plugin, nếu bạn đang sử dụng Công cụ SDK r17 hoặc mới hơn.

Điều này sẽ phân tích cú pháp Lint XML và hiển thị kết quả theo cùng một kiểu với các trình phân tích tĩnh khác cho Jenkins.

+1

Tôi sử dụng plugin này, hoàn hảo cho công việc. Cảm ơn. –

+0

Tôi đã cố gắng sử dụng plugin này quá nhưng nó không nhận các kết quả lint (xem http://stackoverflow.com/questions/12716150/jenkins-lint-plugin-not-picking-up-results) - bất kỳ lời khuyên về những gì có thể sai? –

Các vấn đề liên quan