Ответ 1
Сотрудник сказал мне, что у каждой сборки в Дженкинсе есть "действия", связанные с ней, и что плагины Дженкинса делают свою магию через действия. Я смог найти все действия своих действий с помощью build.getActions()
. Затем я перебирал действия, пока не получил LogParserAction
, который является действием, предоставляемым плагином Jenkins Log Parser.
Затем я просмотрел исходный код LogParserAction.class
, чтобы найти метод getErrorLinksFile()
. С помощью этого метода я смог получить текст анализируемого журнала. Аналогичный метод под названием getWarningLinksFile()
доступен для предупреждений, а другой доступен для информации.
Затем я зациклился на тексте на символе \n
и применил некоторые регулярные выражения, чтобы он выглядел так, как я хотел. Важные части кода приведены ниже. Выглядит лучше, если вы рассматриваете его как HTML в Notepad ++
%>
<TABLE width="100%">
<TR>
<TD class="bg1" colspan="2">ERRORS</TD>
</TR>
<%
def publisher = null
for(iter in project.getPublishersList()){
if(iter.getDescriptor().getDisplayName().equals("Editable Email Notification")){
publisher = iter
break
}
}
if(publisher != null){
def logParserResult
//Get the LogParserAction from Jenkins
for(action in build.getActions()){
if(action.toString().contains("LogParserAction")){
//Get the LogParserResult from the LogParserAction
logParserResult = action.getResult()
break
}
}
//Get the ErrorLinksFile from the LogParserResult
def errorLinksFile = new File(logParserResult.getErrorLinksFile())
//Rewrite the URL so it directs to something useful
pattern = ~/<a.*?><font.*?>/
def errorList = []
for(line in errorLinksFile.getText().split("\n")){
//All errors have a link, so this makes sure no superfluous text is displayed
if(!line.contains("href")){
continue
}
errorList.add(line.replaceAll(pattern, "<a href="+ rooturl + build.url + "parsed_console/?\">").minus("</font>"))
}
%>
<TR>
<TD class="bg2" colspan="2">Total : ${errorList.count{it}} error(s)</TD>
</TR>
<%
for(error in errorList){
%>
<TR>
<TD class="errors" colspan="2">${error}</TD>
</TR>
<%
}
%>
</TABLE>