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_* 的变量变过来,但是我没有尝试。 ??以上是我遇到的问题和解决的方法。
|