Отправить разобранный консольный вывод по электронной почте - PullRequest
11 голосов
/ 04 января 2012

Я работаю с двумя плагинами Jenkins, Email-Ext и Log Parser .У меня есть регулярные выражения для плагина Log Parser, как я хочу их, и я хотел бы включить вывод плагина Log Parser в электронное письмо, которое рассылается пользователям после сборки.

Email-Плагин Ext имеет доступ к выводу консоли, и я мог бы переписать свои регулярные выражения для вывода консоли в электронном письме, но поскольку плагин Log Parser уже проделал тяжелую работу, я надеялся, что есть какой-то способ, которым я мог бы просто перенести его вывод вадрес электронной почты.

Кто-нибудь знает (как переменная окружения Jenkins), как это можно сделать?

Ответы [ 2 ]

1 голос
/ 05 января 2012

Сотрудник сказал мне, что с каждой сборкой в ​​Jenkins связаны «действия», и что плагины Jenkins делают свою магию через действия. Я смог найти все действия моих действий с помощью 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>
0 голосов
/ 05 января 2012

Если вы можете вытащить логи и записать в файл. Вы можете прикрепить этот файл в качестве вложения к вашей электронной почте, используя Email-Ext.

...