如何禁用Lerna日志颜色?解决Jenkins日志乱码问题
解决Jenkins中Lerna日志颜色代码乱码问题
问题场景
在Jenkins中通过Docker容器运行Lerna时,日志里混入大量颜色控制代码导致乱码,示例日志片段:
[37;40mlerna[0m [0m[36;40mnotice[0m [0m[35mcli[0m v8.1.3
本地运行时日志显示正常,已尝试设置FORCE_COLOR=0、NO_COLOR=true等环境变量,但问题未解决。当前使用的Docker命令和脚本如下:
Docker运行命令
-v "$(pwd)":/usr/src/frontend \ -w /usr/src/frontend/ \ -e FORCE_COLOR=0 \ -e NPM_CONFIG_PROGRESS=false \ -e NPM_CONFIG_SPIN=false \ -e NPM_CONFIG_COLOR=false \ -e NO_COLOR=true \ "node:20.13.1-alpine" \ /bin/sh -c \ "sh version-update.sh"
version-update.sh脚本
git_version=0.4.0 echo "Update Front-end Version to $git_version" yarn npx lerna init npx lerna version $git_version --yes --no-changelog --no-git-tag-version
解决方案
1. 给Lerna命令添加--no-color参数
Lerna原生支持通过命令行参数强制关闭颜色输出,直接修改脚本中的Lerna命令即可:
npx lerna init --no-color npx lerna version $git_version --yes --no-changelog --no-git-tag-version --no-color
该方法优先级最高,会覆盖环境变量和配置文件的设置,是最直接有效的解决方式。
2. 移除Docker的-t参数
Docker的-t参数会分配伪终端,导致Lerna检测到终端环境而输出颜色。去掉该参数后,程序会识别为非交互式环境,配合已设置的环境变量即可禁用颜色:
-v "$(pwd)":/usr/src/frontend \ -w /usr/src/frontend/ \ -e FORCE_COLOR=0 \ -e NO_COLOR=true \ "node:20.13.1-alpine" \ /bin/sh -c \ "sh version-update.sh"
3. 全局配置Lerna禁用颜色
在项目根目录创建.lernarc.json文件,添加全局颜色禁用配置,后续所有Lerna命令都会自动应用:
{ "noColor": true, "command": { "init": { "noColor": true }, "version": { "noColor": true } } }
内容的提问来源于stack exchange,提问作者Eastman
相关产品推荐
相关产品推荐

