Send parsed console output in email

前端 未结 2 1280
温柔的废话
温柔的废话 2020-12-09 05:41

I am working with two Jenkins plugins, Email-Ext and Log Parser. I have the regular expressions for the Log Parser plugin how I want them, and I would like to include the o

相关标签:
2条回答
  • 2020-12-09 05:47

    If you are able to pull the logs and write into a file. You can attach that file as an attachment to your email using Email-Ext.

    0 讨论(0)
  • 2020-12-09 06:00

    A co-worker told me that every build in Jenkins has "actions" associated with it and that Jenkins plugins do their magic via actions. I was able to find all actions of my actions with build.getActions(). I then looped through the actions until I got LogParserAction which is the action supplied by the Jenkins Log Parser plugin.

    I then looked through the source code of LogParserAction.class to find the method getErrorLinksFile(). With this method I was able to get the text of the parsed log. A similar method called getWarningLinksFile() is available for the warnings and another is available for info.

    I then looped through the text on \n character and applied some regexs to make it look how I wanted. Important parts of the code are below. Looks better if you view it as HTML in 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 讨论(0)
提交回复
热议问题