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

相关推荐
C雨后彩虹2 小时前
CAS 在 Java 并发工具中的应用
java·多线程·并发·cas·异步·
范纹杉想快点毕业2 小时前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
2501_940315262 小时前
【无标题】2390:从字符串中移除*
java·开发语言·算法
半聋半瞎2 小时前
Flowable快速入门(Spring Boot整合版)
java·spring boot·后端·flowable
散峰而望2 小时前
【算法竞赛】树
java·数据结构·c++·算法·leetcode·贪心算法·推荐算法
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于SpringBoot的理工学院学术档案管理系统为例,包含答辩的问题和答案
java·spring boot·后端
shejizuopin2 小时前
基于SSM的高校旧书交易系统的设计与实现(毕业论文)
java·mysql·毕业设计·论文·ssm·毕业论文·高校旧书交易系统的设计与实现
修己xj2 小时前
SpringBoot解析.mdb文件实战指南
java·spring boot·后端
咩图3 小时前
Sketchup软件二次开发+Ruby+VisualStudioCode
java·前端·ruby