jenkins不识别中文的原因排查及解决
1. 本文解决问题
- jenkins创建任务时,命名字母英文都没问题,一旦写成了中文就报错。比如出现
Malformed input or input contains unmappable chacrater
错误。 - jenkins构建日志打印时,对于中文不识别都变成了
???
。
2. 部署情况
我们的jenkins
是部署在centos
服务器里,直接用docker下载的镜像运行的。版本是Jenkins 2.303.1
。
3. 问题排查
出现了中文不识别情况,那肯定说明是字符集编码有问题,所以我们的思路肯定是要确认jenkins
的字符集编码是否是utf-8
。
3.1 查看系统信息编码
比如你的jenkins
地址是http://localhost:8083
,那就访问http://localhost:8083//systemInfo
即可显示系统信息的页面。(也可以点击【系统管理】-【状态信息】-【系统信息】查看),如下图:
除了上图框选的,这个页面的下边还有一个sun.jnu.encoding
变量也不是utf-8
,显然jenkins
编码不对。
3.2 查看系统配置编码
系统配置的位置是在【系统管理】-【系统配置】-【系统配置】里,在里边查看下LANG
变量值。如下图:
上图最初不是C.UTF-8
,是zh.CN.UTF-8
。这里为啥改成这个,下边会说。
4. 问题解决步骤
既然知道了是编码问题,然后我就开始了修改编码的操作。我是这么解决的。
4.1 docker启动脚本修改
因为我们是用docker
运行的,对于上边3.1
所示的编码问题,我在启动脚本里加了下边框选的东西:
第一个是让容器里边的字体能够和宿主机保持一致(可能跟这个没啥关系)。
第二句主要是为了设置LANG
变量为C.UTF-8
,我刚开始设置的是zh.CN.UTF-8
,并不管用,然后我搜到了下边一句话,恍然大悟。
如果不在容器创建时设置LANG=C.UTF-8
,会导致进入到容器里,不管你咋通过export
或者source
命令修改变量,退出容器就失效了。
第三句,是为了保证3.1那个file.encoding
变成utf-8
。
4.2 jenkins界面上修改LANG
参数
我最初只是按照4.1步骤,改了docker启动脚本的编码,但是我发现在jenkins
构建的时候,日志里一直都是???
这玩意。我就到上边3.2那个位置。修改了LANG
的变量。如下图:
5. 特别说明
有很多小伙伴可能对于docker
容器怎么看编码不是很清楚。可以按照下边步骤。
这里如果不修改,有的时候默认是en
开头,有的时候是POSIX
。
docker启动脚本设置变量,要用-e
传参,即:
也有人觉得前边locale
命令下,设置LC_ALL
变量,就可以把所有LC_*
的变量变过来,但是我没有尝试。
以上是我遇到的问题和解决的方法。