我们有一个构建作业,其中控制台输出显示了许多奇怪的消息,如下所示,所以我们无法加载完整的日志,必须删除构建配置中的-X
选项来摆脱它们。我认为这发生在我升级Jenkins版本之后。
知道是什么引起的吗
[DEBUG] http-outgoing-0 >> "j[0x5]q4/J[0x18]^di[0x86][0xbf]C_[0xd6]G[0x1d]
[0xd4][0x7][0xf3][0xc7][0x14][0xdf][0x8d][0xe1][0x13][0xd8]$y|#[0x1e][0xbf]
[0xe6][0x81]<[0xca][0x6][0xa1]~j[0x81]3[0xbc][0x98][0xd1][0x83][0xa7]
[0xc5]8[0xfa]>[0xd9]edZ[0xb2][0xc][0xe0][0x5][0xab][0xf3][0x1a]M[0xb3][0xe7]
[0x1][0xf4][\n]"
[DEBUG] http-outgoing-0 >> "[0xcd][0x9d][0x86]Zjp[0xb4][0x8d][0x87]
[0x8f]cn[0xe7][0xab]oL.[0xb2]}[0x86][0xf8]D[0x87][0xba][0x9d][0xcc]j[0x15]
[0xa4][0xe6]![0x9f]_BBC[0xbf]j[0xab]Rl[0x10][0x92][0xc5])[0xb2][0xc5]i[0xc2]
2条答案
按热度按时间u5rb5r591#
我几乎在同一时间遇到了这个问题(2018年4月),并发现其由Artifactory插件2.15.0触发一年多来,我一直让这个插件降级,以避免在我的构建日志中记录调试日志。(直到上周,由于与新版本的Artifactory不兼容,我被迫升级),有可能是类路径中的不同插件或jar文件导致了您的问题。
在花了整个周末解决这个问题之后,我终于在我的构建环境中找到了根本原因。
要点是:
潜伏的问题
在我的例子中,DEBUG日志记录的根本原因是我的测试依赖项中有cobertura-2.1.1.jar,它包含一个logback.xml文件,还将logback-classic.jar作为依赖项引入(广泛认为这是一个错误,请参见Issue 2、Issue 14、Issue 36)。当在类路径中找到logback.xml文件时,覆盖Jenkins(和正在构建的项目)中的任何其他logback设置。但是,由于logback不是Apache Commons Logging(JCL)选择的日志框架,因此从未触发过此日志设置。
触发器
将Artifactory插件从2.14.0升级到2.15.0,将其日志记录从:通用日志记录-1.1.1.jar(log4j-1.2.17.jar)到:jcl-over-slf 4j-1.7.25.jar(slf 4j-api-1.7.25.jar).仅供参考,log4j 1.x使用默认的根日志记录级别DEBUG,而log4j 2.x使用全局日志记录级别ERROR,这 * 可能 * 是一个完全不同的DEBUG日志记录源(但不是在我的情况下)。我的构建环境(ant)提供了log4j 2.10。0并在类路径上回登录,这只会混淆我的测试,因为根据构建过程中运行的插件,会产生不一致的结果。
当使用Artifactory插件v2.15.0+时,日志框架切换到logback,这将为cobertura-2.1.1.jar中的logback.xml文件提供权限,将根日志级别设置为DEBUG,强制构建过程的所有后续部分在DEBUG级别记录。这包括 Apache Commons HttpClient 的有线日志记录,生成http-输出-0(每个HTTP/S消息中的序列化十六进制 * 和 * 交错Base64编码内容-如您在问题中所示)。以这种方式记录JAR文件的一个PUT将使构建时间和构建日志的大小增加几个数量级(这是我在我的构建环境中所经历的),它可以很容易地削弱你的整个Jenkins服务器。这是一个巨大的问题,正如你从上面的Cobertura GitHub问题中所看到的,即使这是一个简单的修复,也没有采取任何步骤在四年内生产一个修复版本。
修正
为了解决这个问题,我不得不在Jenkins服务器上进行几处更改:
作为参考,我的 broken**.ant/lib**文件夹包含以下与日志相关的jar文件(2个可能的调试日志源):
而我的 fixed**.ant/lib**文件夹包含以下日志jar:
commons-logging-1.2.jar (现在唯一可用的JCL版本)
slf4j-api-1.7.26.jar (现在是唯一可用的日志记录框架)
slf4j-simple-1.7.26.jar (现在是唯一的SLF 4J实现)
在我的固定Ant类路径中,commons-logging-1.2只能选择SLF 4J API(或JUL),并且只有一个SLF 4J实现可用(slf 4j-simple)。
TL;DR
三年来,Cobertura 2.1.1一直在告诉logback “DEBUG All the Things!",但没有人听,直到一个新版本的Artifactory插件更改了JCL版本,并沿着一个SLF 4J实现,允许logback被选为“最佳可用”日志框架。logback采纳了Cobertura的建议,在我的构建日志中加入了一个聚会,这可以通过从环境中删除logback并为JCL和SLF 4J API提供一个行为良好的日志框架(如slf 4j-simple)来防止。
tsm1rwdh2#
所以我最近偶然发现了这个问题,在我的案例中,这是由于在构建阶段在maven中设置了**-X**标志。有人设置了这个标志,但忘记删除它。这是一个老问题,但也许这个信息对某些人有用。