Jenkins 构建日志出现 `[INFO]` 乱码?原因与完整解决方案(小白必看)

在使用 Jenkins 构建 Java / Maven 项目时,很多人会在 Console Output 里看到类似下面的内容:

text 复制代码
[[1;34mINFO[m] ruoyi-spring-boot-starter-protection ............... [1;32mSUCCESS[m

而在本地终端中,正常应该显示为:

text 复制代码
[INFO] ruoyi-spring-boot-starter-protection ............... SUCCESS [ 0.996 s]

乍一看像是乱码,甚至会怀疑 Maven 或 Jenkins 出了问题。
其实这是一个非常常见、也非常容易解决的问题。

本文将用小白视角,讲清楚:

  • 这类"乱码"到底是什么
  • 为什么 Jenkins 里会出现
  • 如何正确、彻底解决
  • 遇到类似问题该如何自行排查

一、先说结论:这不是乱码,也不是报错

你看到的内容:

text 复制代码
[1;34m
[1;32m
[m

不是乱码,而是 ANSI 转义序列(ANSI Escape Code)

ANSI 转义序列是干嘛的?

它是终端里用来:

  • 给文字上色(蓝色 INFO、绿色 SUCCESS、红色 ERROR)
  • 设置粗体、下划线
  • 控制显示样式

例如:

代码 含义
[1;34m 蓝色加粗
[1;32m 绿色加粗
[m 重置样式

二、为什么本地终端正常,Jenkins 却"乱码"?

原因一句话总结:

Maven 输出了彩色日志,但 Jenkins 默认不会解析 ANSI 颜色控制码。

本地终端为什么没问题?

  • iTerm / Terminal / VS Code Terminal
    👉 默认支持 ANSI 渲染

Jenkins 为什么不行?

  • Jenkins 的 Console Output:

    • 默认是 纯文本
    • 不会自动解析 ANSI 转义序列
    • 于是控制字符被原样打印出来

所以你看到的并不是 Maven 异常,而是 Jenkins 不懂怎么显示颜色


三、解决方案一(推荐):让 Jenkins 支持 ANSI 颜色

这是最推荐、最优雅的方式。

1️⃣ 安装 AnsiColor 插件

路径:

复制代码
系统管理 → 插件管理 → 可选插件

搜索并安装:

复制代码
AnsiColor

安装完成后 重启 Jenkins


2️⃣ 在 Job 中开启 ANSI 渲染(Freestyle 任务)

适用于:自由风格任务(Freestyle Job)

进入你的 Job 配置:

复制代码
Job → 配置 → Build Environment(构建环境)

勾选:

text 复制代码
☑ Color ANSI Console Output
   Color Map:xterm

保存后重新构建。


3️⃣ 效果对比

之前(未开启):

text 复制代码
[[1;34mINFO[m] xxx

之后(开启 AnsiColor):

text 复制代码
[INFO] xxx

并且:

  • INFO 是蓝色
  • SUCCESS 是绿色
  • ERROR 是红色
  • 日志层次非常清晰

四、解决方案二(兜底):直接关闭 Maven 的颜色输出

如果你:

  • 不想装插件
  • 或公司 Jenkins 不允许装插件

可以选择 关闭 Maven 的彩色日志

修改构建命令

在 Jenkins 的「执行 shell」中:

bash 复制代码
mvn -Dstyle.color=never -U -DskipTests package

或(使用 Jenkins 内置 Maven):

bash 复制代码
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/apache-maven-3.6.3/bin/mvn \
-Dstyle.color=never \
-U -DskipTests package

原理

  • -Dstyle.color=never
  • 告诉 Maven:完全不要输出 ANSI 颜色

日志将恢复为纯文本格式。


五、为什么不是在 Environment 页面配置?

很多新手会误以为是在:

复制代码
Job → Environment

实际上这里的选项:

  • Delete workspace before build
  • Secret Text
  • SSH before / after build
  • 时间戳前缀

都和 ANSI 日志无关

👉 真正相关的是「Build Environment」里的 AnsiColor 选项


六、如何自行判断是不是 ANSI 问题?

以后你再遇到类似情况,可以按下面流程快速判断:

✔ 特征 1

日志中出现:

复制代码
[1;xxm

✔ 特征 2

本地终端显示正常,Jenkins 显示异常

✔ 特征 3

构建本身是 SUCCESS

👉 99% 可以确定是 ANSI 颜色问题


七、推荐做法总结(给小白)

场景 推荐方案
日常使用 Jenkins ✅ AnsiColor 插件
不能装插件 -Dstyle.color=never
想要清晰日志 ✅ 插件方案
只要能看 关闭颜色即可

八、结语

这种 [[1;34mINFO[m] 问题:

  • 不是 Maven 错误
  • 不是 Jenkins 构建失败
  • 不是 JDK 问题

而是一个显示层面的小坑

一旦理解了 ANSI 转义序列的原理,这类问题以后基本可以 一眼识别、秒级解决

相关推荐
invicinble5 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
wbs_scy5 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2735 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
try2find6 小时前
打印ascii码报错问题
java·linux·前端
014-code6 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
Nicander6 小时前
多数据源下@transcation事务踩坑
java·后端
それども7 小时前
DELETE 和 TRUNCATE TABLE区别
java·数据库·mysql
sjsjsbbsbsn7 小时前
大模型核心知识总结
java·人工智能·后端
白晨并不是很能熬夜8 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio