电子邮件扩展插件 - 无法使BUILD_LOG_EXCERPT工作

Gre*_*reg 5 email jenkins jenkins-plugins email-ext

无论我在BUILD_LOG_EXCERPT中放置什么,我得到的只是一个空体的电子邮件,因此可以使用一些帮助.

我有一个写入控制台的java程序.Jenkins控制台输出的片段如下所示:

...
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building project1 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:1.4.0:java (default-cli) @ project1 ---
Parameters provided: SG, 100, 1000
query: select COUNT(*) from table1 where col1 = ? and col2 = ? and col3 = ?
Rows in table: 5776
Threshold: 100
Rows returned above threshold, skipping dpan generation batch file.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.125 s
[INFO] Finished at: 2016-02-08T09:31:37-08:00
[INFO] Final Memory: 8M/245M
...
Run Code Online (Sandbox Code Playgroud)

在Jenkins工作中,我创建了一个Post Build步骤,并将以下行放在默认内容中:

${BUILD_LOG_EXCERPT, start="\\b(Parameters)\\b", end="\\b(Threshold)\\b"}
Run Code Online (Sandbox Code Playgroud)

当我触发工作时,我得到的只是一封空电子邮件.但是,如果我添加

${BUILD_LOG, maxLines=9999, escapeHtml=false}
Run Code Online (Sandbox Code Playgroud)

然后我在电子邮件中获得完整的控制台输出.有任何想法吗?我使用的是插件版本2.40.3.

pru*_*raj 6

email-ext中的BUILD_LOG_EXCERPT使用开始和结束进行非常简单的正则表达式匹配。通过使用两个echo语句使它起作用,即一个从我想要的控制台日志开始的位置开始,另一个在您希望在电子邮件中记录的日志的结束位置开始。

例如:

在构建步骤中:

echo Start
<your build commands>
echo End
Run Code Online (Sandbox Code Playgroud)

在email-ext的Default部分中,使用以下行使其正常工作:

${BUILD_LOG_EXCERPT, start="^Start", end="^End"}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是html电子邮件输出,则可以使用下面的行来对齐电子邮件中的输出

<pre>${BUILD_LOG_EXCERPT, start="^Start", end="^End"}</pre>
Run Code Online (Sandbox Code Playgroud)

您可以对其进行调整并使其运行,希望它对您一样对我有用。


top*_*her 6

看起来你的正则表达式找不到任何匹配,所以你没有得到任何日志行.这是因为BUILD_LOG_EXCERPT变量用于java.util.regex.Pattern.Matcher.matches()匹配正则表达式 - 这只会True整个字符串匹配时返回(在 SO问题中引用).日志解析器逐行运行,因此它会针对正则表达式测试整行,并且失败(因为"参数"之后有字符).

如果您正在寻找Parameters以其开头但可能包含字符的字符串,则可以匹配

"\\b(Parameters)\\b(?s).*"

它将匹配"参数"和其后的任意字符串.