1. 问题
最近发现一个问题:在 Jenkins
中打开某些项目的工作空间(WorkSpace
)的时候,页面会崩溃,显示如下的错误信息:
查看 Jenkins
日志发现如下错误信息,提示的是路径无效错误(InvalidPathException
),该目录应该是中文名字,猜测是编码转换出了错误。
2. 解决
由于是使用 Docker
运行的 Jenkins
,登录进 Jenkins
容器内部,查看对应的目录:
发现在容器内部看到的目录就是乱码了。而在外部环境可以正常显示目录:
所以猜测应该是 Docker
容器加载目录过程中编码错误,导致转换出错。经过查找,修改如下即可:
1services:
2 jenkins:
3 image: jenkins/jenkins:2.303.1
4 environment:
5 # 注意,此处不能用en_US.UTF-8,因为该容器中没有该locale,只能用C.UTF-8
6 - LANG=C.UTF-8
需要注意的是不能够使用en_US.UTF-8
。设置成这个没有解决问题,浪费了很多时间。
3. 备注
另外,网上还有说法要添加 JAVA_OPTS="-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"
,但是经过实验发现没有用处。我这个问题原因在于 Docker
内部文件系统就编码不正确,Java
层面的修改不能够解决问题。