Jenkins节点将LANG环境变量修改成en_US.UTF-8的问题排查及填坑经验
背景最近新装了一套jenkins,由于节点的编码不是UTF-8导致jenkins读取workspace中文子目录是乱码从而引发jenkins流水线异常中断退出采取措施尝试过在节点env注入LANG环境变量,直接登录节点修改/etc/profile和~/.bash_profile,这三种方式均以失败告终,即便是locale命令执行结果显示的是UTF-8编码. 最后还是尝试在~/.bashrc加上ex
背景
最近新装了一套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
重连节点后成功修改节点系统属性里面的编码
更多推荐
所有评论(0)