Показать результаты Android Lint в Дженкинс - PullRequest
5 голосов
/ 05 января 2012

Как отобразить результаты Android Lint в Jenkins, например как предупреждения? Я хочу просмотреть предупреждения из графического интерфейса Jenkins, как и предупреждения компилятора и предупреждения PMD / Checkstyle.

Вывод задания Дженкинса выглядит примерно так:

 [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 также может создавать XML-файл, но я боюсь, что нет плагина Jenkins, способного проанализировать файл. Или я что-то упустил?

Ответы [ 3 ]

7 голосов
/ 22 марта 2012

Jenkins теперь имеет плагин Android Lint , если вы используете SDK Tools r17 или новее.

Это проанализирует Lint XML и отобразит результаты в том же стиле, что и другие плагины статического анализа для Jenkins.

3 голосов
/ 27 января 2012

Павол, большое спасибо за вдохновение!К сожалению, ваш regexp / script не работает для меня, но это была очень хорошая отправная точка для дальнейших исследований.Вот что работает для моей конфигурации:

Имя: Android Lint Parser

Регулярное выражение: ([^\s]*: )?([^ ]*):\s+(.*)\[(.*)\]$

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 голосов
/ 11 января 2012

В плагине скомпилированных предупреждений какой-либо версии вы можете создать парсер с сайта конфигурации jenkins, используя regexp и groovy script.Я создал один для lint, который я запускаю как скрипт оболочки с выводом в некоторый файл.

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

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);
...