我正在使用两个Jenkins插件,Email-Ext和Log Parser。我有Log Parser插件的正则表达式,我想要它们,我想在构建后发送给用户的电子邮件中包含Log Parser插件的输出。
Email-Ext插件可以访问控制台输出,我可以在电子邮件中为控制台输出重写我的正则表达式,但由于Log Parser插件已经完成了艰苦的工作,我希望有一些方法我可以把它的输出拉到电子邮件中。
有没有人知道任何方式(比如Jenkins环境变量)可以这样做吗?
答案 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。
将该文件作为附件附加到您的电子邮件中