2012-01-05 2 views
5

Come posso visualizzare i risultati da Android Lint in Jenkins, ad es. come avvertimenti? Voglio sfogliare gli avvertimenti dalla GUI di Jenkins, proprio come gli avvisi del compilatore e gli avvertimenti di PMD/Checkstyle.Visualizzazione di Android Lint in Jenkins

L'uscita dal lavoro Jenkins è qualcosa di simile:

[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 può creare un file XML troppo, ma ho paura che non ci sia Jenkins plug in grado di analizzare il file. O mi sta sfuggendo qualcosa?

+2

Sì, è difficile perché il formato XML Lint non è compatibile con altri strumenti Java simili. Ho lavorato su un plugin Jenkins per analizzare i risultati di Lint. –

+0

Christopher, un plug-in di Lint per Android per Jenkins sarebbe molto utile. Ad ogni modo, con l'aiuto di Pavol ho risolto il mio problema. Si prega di inviare un commento quando il plug-in è disponibile per il test. Grazie! – stefan222

risposta

3

Pavol, la ringrazio molto per la vostra ispirazione! Sfortunatamente il tuo script/espressione regolare non funziona per me, ma è stato un ottimo punto di partenza per ulteriori approfondimenti. Ecco ciò che funziona per la mia configurazione:

Nome: Android Lint Parser

Regexp: ([^\s]*:)?([^ ]*):\s+(.*)\[(.*)\]$

lo script 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

In plugin di avviso di compilazione da alcune versioni è possibile creare parser dal sito di configurazione di jenkins utilizzando script regexp e groovy. Ne ho creato uno per il lint che eseguo come script di shell con l'output su qualche file.

Regexp: ^\s*([^ ]*): ([^ ]*):\s*(.*)\[(.*)\]$

lo script 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 ha ora la Android Lint Plugin, se si sta utilizzando SDK Tools r17 o più recente.

Analizzerà Lint XML e visualizzerà i risultati nello stesso stile di altri plug-in di analisi statica per Jenkins.

+1

Io uso questo plugin, è perfetto per il lavoro. Grazie. –

+0

Ho provato a usare anche questo plugin, ma non raccoglie i risultati del lint (vedi http://stackoverflow.com/questions/12716150/jenkins-lint-plugin-not-picking-up-results) - qualche consiglio su cosa potrebbe essere sbagliato? –