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 转义序列的原理,这类问题以后基本可以 一眼识别、秒级解决

相关推荐
vx_Biye_Design2 小时前
【关注可免费领取源码】云计算及其应用网络教学系统--毕设附源码35183
java·spring·spring cloud·servlet·eclipse·云计算·课程设计
码农阿豪8 小时前
Nacos 日志与 Raft 数据清理指南:如何安全释放磁盘空间
java·安全·nacos
直有两条腿9 小时前
【大模型】Langchain4j
java·langchain
love530love9 小时前
Scoop 完整迁移指南:从 C 盘到 D 盘的无缝切换
java·服务器·前端·人工智能·windows·scoop
消失的旧时光-19439 小时前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发
莫寒清9 小时前
ThreadLocal
java·面试
学习是生活的调味剂10 小时前
spring bean循环依赖问题分析
java·后端·spring
Coder_Boy_10 小时前
Java(Spring AI)传统项目智能化改造——商业化真实案例(含完整核心代码+落地指南)
java·人工智能·spring boot·spring·微服务
五阿哥永琪11 小时前
1. 为什么java不能用is开头来做布尔值的参数名,会出现反序列化异常。
java·开发语言
chilavert31812 小时前
技术演进中的开发沉思-371:final 关键字(中)
java·前端·数据库