jenkins不识别中文的原因排查及解决

1. 本文解决问题

  1. jenkins创建任务时,命名字母英文都没问题,一旦写成了中文就报错。比如出现Malformed input or input contains unmappable chacrater错误。
  2. jenkins构建日志打印时,对于中文不识别都变成了???

2. 部署情况

   我们的jenkins是部署在centos服务器里,直接用docker下载的镜像运行的。版本是Jenkins 2.303.1

3. 问题排查

   出现了中文不识别情况,那肯定说明是字符集编码有问题,所以我们的思路肯定是要确认jenkins的字符集编码是否是utf-8

3.1 查看系统信息编码

   比如你的jenkins地址是http://localhost:8083,那就访问http://localhost:8083//systemInfo 即可显示系统信息的页面。(也可以点击【系统管理】-【状态信息】-【系统信息】查看),如下图:

jenkins output 中文乱码 jenkins汉化不完全_jenkins不识别中文


   除了上图框选的,这个页面的下边还有一个sun.jnu.encoding变量也不是utf-8,显然jenkins编码不对。

3.2 查看系统配置编码

   系统配置的位置是在【系统管理】-【系统配置】-【系统配置】里,在里边查看下LANG变量值。如下图:

jenkins output 中文乱码 jenkins汉化不完全_docker_02


   上图最初不是C.UTF-8,是zh.CN.UTF-8。这里为啥改成这个,下边会说。

4. 问题解决步骤

   既然知道了是编码问题,然后我就开始了修改编码的操作。我是这么解决的。

4.1 docker启动脚本修改

   因为我们是用docker运行的,对于上边3.1所示的编码问题,我在启动脚本里加了下边框选的东西:

jenkins output 中文乱码 jenkins汉化不完全_jenkins output 中文乱码_03


   第一个是让容器里边的字体能够和宿主机保持一致(可能跟这个没啥关系)。

   第二句主要是为了设置LANG变量为C.UTF-8,我刚开始设置的是zh.CN.UTF-8,并不管用,然后我搜到了下边一句话,恍然大悟。

jenkins output 中文乱码 jenkins汉化不完全_jenkins不识别中文_04


   如果不在容器创建时设置LANG=C.UTF-8,会导致进入到容器里,不管你咋通过export 或者source命令修改变量,退出容器就失效了。

   第三句,是为了保证3.1那个file.encoding变成utf-8

4.2 jenkins界面上修改LANG参数

  我最初只是按照4.1步骤,改了docker启动脚本的编码,但是我发现在jenkins构建的时候,日志里一直都是???这玩意。我就到上边3.2那个位置。修改了LANG的变量。如下图:

jenkins output 中文乱码 jenkins汉化不完全_docker_02

5. 特别说明

  有很多小伙伴可能对于docker容器怎么看编码不是很清楚。可以按照下边步骤。

jenkins output 中文乱码 jenkins汉化不完全_系统配置_06


  这里如果不修改,有的时候默认是en开头,有的时候是POSIX

   docker启动脚本设置变量,要用-e传参,即:

jenkins output 中文乱码 jenkins汉化不完全_jenkins中文编码修改_07


   也有人觉得前边locale命令下,设置LC_ALL变量,就可以把所有LC_*的变量变过来,但是我没有尝试。

  以上是我遇到的问题和解决的方法。