在电子邮件中发送解析的控制台输出

时间:2012-01-03 23:05:01

标签: email jenkins hudson logparser email-ext

我正在使用两个Jenkins插件,Email-ExtLog Parser。我有Log Parser插件的正则表达式,我想要它们,我想在构建后发送给用户的电子邮件中包含Log Parser插件的输出。

Email-Ext插件可以访问控制台输出,我可以在电子邮件中为控制台输出重写我的正则表达式,但由于Log Parser插件已经完成了艰苦的工作,我希望有一些方法我可以把它的输出拉到电子邮件中。

有没有人知道任何方式(比如Jenkins环境变量)可以这样做吗?

2 个答案:

答案 0 :(得分:1)

一位同事告诉我,Jenkins的每一个版本都有与之相关的“动作”,并且Jenkins插件通过动作来完成他们的魔法。我能够用build.getActions()找到我行动的所有动作。然后我循环执行这些操作,直到我得到LogParserAction这是Jenkins Log Parser插件提供的操作。

然后,我查看了LogParserAction.class的源代码,找到方法getErrorLinksFile()。通过这种方法,我能够获得解析日志的文本。类似的方法getWarningLinksFile()可用于警告,另一种方法可用于信息。

然后我循环查看\n字符上的文字并应用了一些正则表达式,使其看起来像我想要的那样。代码的重要部分如下。如果您在Notepad ++中将其视为HTML

,效果会更好
%>
    <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>

答案 1 :(得分:0)

如果您能够提取日志并写入文件。 您可以使用Email-Ext。

将该文件作为附件附加到您的电子邮件中