Jenkins Log Parser 的不足
2019-03-01 本文已影响0人
jaymz明
本文提到的Log parser是jenkins 的一个插件
Log Parser Plugin
存在的价值:jenkins 的console打印了太多的log,当报错信息发生时,不方便查看error的日志,经常会出现日志卡死,引用该插件可以方便做到根据过滤条件显示日志。
组成部分
log可以分块展示(error,warning,info),级别之后可以根据匹配的关键字,分配log到对应的块中。正如你所发现的它是存在一个rule,rule文件里定义了你扫描日志的规则。例如:
ok /not really/
# match line starting with 'error ', case-insensitive
error /[Ee]rror/
error /ERROR/
# list of warnings here...
warning /[Ww]arning/
warning /WARNING/
# create a quick access link to lines in the report containing 'INFO'
info /INFO/
# each line containing 'BUILD' represents the start of a section for grouping errors and warnings found after the line.
# also creates a quick access link.
start /BUILD/
- error 块定义了log中出现Error或者error字眼,会将这部分log link到error里。同理 warning 和info也是。该规则定义支持正则表达式。
- start块,定义了过滤出哪些log段,文中默认是出现BUILD。
配置部分
-
手动配置
可以在全局配置中
image
然后在job的配置页面post-build Actions
image这样在扫描日志的时候会应用你配置的rule。
-
pipeline
node { stage("log parser") { step([$class: 'LogParserPublisher', parsingRulesPath: "${JENKINS_HOME}/userContent/minimal_rules", useProjectRule: false, failBuildOnError: failBuildOnError, unstableOnWarning: unstableOnWarning]) } }
pipeline的方式很简单,只需要在job的开头或者结尾的地方加上上述代码,就可以实现对整个output console进行分析。其中failBuildOnError参数的意思是当我出现Error的时候,我会将整个build的结果修改为fail。告知用户这个job有错误。一般我们把这个功能作为检查code 的duplicate,checkstyle等。
Sample
-
write rule file
error /Error/ start /ZZM|TEST/
-
write pipeline job
try { node { stage("ZZM"){ echo 'INfo: oh no' echo 'Error:zzm' } stage("adc"){ echo 'Error: oh no' } stage("TEST"){ echo 'Info ;222' } stage("TEST"){ echo 'Error 444' } } } finally { node { step([$class: 'LogParserPublisher', parsingRulesPath: "${JENKINS_HOME}/userContent/test_rule", useProjectRule: false, failBuildOnError: true, unstableOnWarning: true]) } }
-
result
缺陷
自认为的缺陷,但是我相信使用的人也会遇到这部分需求。当我在大的pipeline中,单单log文件就几个G的情况下,无法针对某个指定的stage进行log分析,一旦log中出现检查点不过的情况立即停止,目前该插件无法做到。当然如果能够指定解析一个文件,也是能够解决这个问题。但是目前看下来并没有该功能。希望在未来的release中会有吧。