背景

最近新装了一套jenkins,由于节点的编码不是UTF-8导致jenkins读取workspace中文子目录是乱码从而引发jenkins流水线异常中断退出

采取措施

尝试过在节点env注入LANG环境变量,直接登录节点修改/etc/profile~/.bash_profile,这三种方式均以失败告终,即便是locale命令执行结果显示的是UTF-8编码. 最后还是尝试在~/.bashrc加上export LANG=en_US.UTF-8这一行解决了问题,jenkins默认应该读的是~/.bashrc里面的环境变量.

问题排查过程

1. 节点属性里面注入LANG环境变量

node节点添加LANG环境变量点击保存并断开重连node后在系统信息发现env仍然是GBK, 修改失败
在这里插入图片描述

2. 安装Environment Injector插件

出现上述问题的原因是缺少Environment Injector 插件,可以去Jenkins=>插件管理页面上搜索安装该插件,如果是离线jenkins 可以去https://plugins.jenkins.io/envinject/ 下载对应版本的hpi格式插件, 然后依次点击Jenkins=>插件管理=>高级=>上传插件如下图:在这里插入图片描述断开重连节点后,查看node节点系统信息 发现LANG环境变量已经修改,然而通过节点的脚本命令行执行println System.getenv("LANG") 命令发现编码仍然是GBK,如下图:
在这里插入图片描述

3. 尝试修改.bashrc系统环境变量文件

上面的问题一直困扰了我很久,期间也尝试过直接上登录上系统修改/etc/profile~/.bash_profile文件加入LANG环境变量但均以失败告终. 直到我查看节点连接时的日志,看到打印出来的环境变量里面有一个.bashrc字样,最后决定修改.bashrc文件试下,直接在 ~/.bashrc 文件加上一行export LANG=en_US.UTF-8
或者执行echo “export LANG= en_US.UTF-8” >> ~/.bashrc 重连节点后脚本命令行里面执行println System.getenv(“LANG”) `查看发现编码修改成功. 重新执行流水线,问题成功解决

4.其他需要注意的地方

查看节点系统信息如果系统属性里面发现编码不是UTF-8的话可以通过修改java启动参数来解决,在job配置下面找到高级按钮然后找到JVM Options对应的框填入-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 重连节点后成功修改节点系统属性里面的编码

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐