首页 > 其他分享 >Jenkins Console 页中文显示乱码的问题

Jenkins Console 页中文显示乱码的问题

时间:2023-08-13 18:56:32浏览次数:35  
标签:JENKINS GIT Console name ## 乱码 jenkins Jenkins

背景:

Jenkins Server 为Helm安装,使用的是 Bitnami 的 chart,当前app版本为 Jenkins 2.401.2

添加一台 Agent,该 Agent 的语言默认为 zh_CN.UTF-8

Pipeline 使用 docker 的形式运行每个任务。


表现形式:

  1. 在 Jenkins 管理页面添加并配置 Agent ,使用SSH方式连接Agent,在连接日志界面有中文字符,无法正常显示。

  2. 在 pipeline 中有任务输出包含中文字符的时候,会在 Console 界面返回乱码字符。

        stage("prepare"){
            steps {
                sh "export LANG=zh_CN.UTF-8"
                echo "INFO: 查找需要编译发布的模块列表 ...."
                echo "INFO: GIT_COMMIT:${GIT_COMMIT} GIT_PREVIOUS_COMMIT:${GIT_PREVIOUS_COMMIT} GIT_PREVIOUS_SUCCESSFUL_COMMIT:${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
                sh "env"
            }
        }

另外:在Console界面查看 env 环境变量中显示 LANG=C.UTF-8 节点的语言配置如下:

JOB_BASE_NAME=main
PATH=/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BUILD_ID=28
BUILD_TAG=jenkins-finance-main-28
JENKINS_URL=http://192.168.22.211:7083/
LANG=C.UTF-8
GIT_URL=https://x.x.x.x/youku/finance.git

问题排查:

  1. 怀疑为Agent运行环境的LANG环境变量设置错误导致,当在 Jenkins 系统配置里面添加环境变量 LANG=zh_CN.UTF-8 没有效果

  2. 在 Jenkins 系统管理 --> 系统配置 --> 全局属性 --> 环境变量 中新增 LANG=zh_CN.UTF-8 后,也没有效果。

  3. 怀疑是 Jenkins Server 端的运行时环境设置错误。
    查看 系统管理 --> 环境信息 变量的值发现问题:

file.encoding   ANSI_X3.4-1968

配置正确的 JVM 参数

1. 排查 Pod 的环境变量配置:

spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchLabels:
              app.kubernetes.io/instance: jenkins
              app.kubernetes.io/name: jenkins
          topologyKey: kubernetes.io/hostname
        weight: 1
  containers:
  - env:
    - name: POD_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.name
    - name: BITNAMI_DEBUG
      value: "false"
    - name: JENKINS_USERNAME
      value: admin
    - name: JENKINS_PASSWORD
      valueFrom:
        secretKeyRef:
          key: jenkins-password
          name: jenkins
    - name: JENKINS_HOME
      value: /bitnami/jenkins/home
    - name: JENKINS_SKIP_BOOTSTRAP
      value: "no"
    - name: JENKINS_HOST
    - name: JENKINS_EXTERNAL_HTTP_PORT_NUMBER
      value: "80"
    - name: JENKINS_EXTERNAL_HTTPS_PORT_NUMBER
      value: "443"
    - name: JENKINS_PLUGINS_LATEST
      value: "true"
    - name: JENKINS_PLUGINS_LATEST_SPECIFIED
      value: "false"
    - name: JENKINS_SKIP_IMAGE_PLUGINS
      value: "false"
    - name: JENKINS_OVERRIDE_PLUGINS
      value: "false"
    image: docker.io/bitnami/jenkins:2.401.2-debian-11-r6
    imagePullPolicy: IfNotPresent

发现并没有通过环境变量的方式传入 JVM 参数 file.encoding

2. 排查 Helm 的 values.yaml 文件

发现Bitnami预留了 javaOpts: [] 配置参数,默认值留空。

## @param jenkinsHome Jenkins home directory
##
jenkinsHome: /bitnami/jenkins/home
## @param javaOpts Custom JVM parameters
##
javaOpts: []
## @param disableInitialization Skip performing the initial bootstrapping for Jenkins
##
disableInitialization: "no"
## @param command Override default container command (useful when using custom images)

3. 配置 javaOpts 参数

## @param javaOpts Custom JVM parameters
##
## javaOpts: []
javaOpts:
  - -Dfile.encoding=UTF-8

4. 重新安装 Jenkins Chart

>_ helm upgrade -n jenkins jenkins -f values.yaml bitnami/jenkins:12.2.5 

验证问题

安装升级 Helm Chart 后,查看 系统管理 --> 环境信息 变量的值

值,已经变为 UTF8

重连 agent 节点,观察日志:

openjdk version "11.0.19" 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.19.0.7-2) (build 11.0.19+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.19.0.7-2) (build 11.0.19+7-LTS, mixed mode, sharing)
[08/13/23 10:35:27] [SSH] Checking java version of /builds/jdk/bin/java
Couldn't figure out the Java version of /builds/jdk/bin/java
bash:行1: /builds/jdk/bin/java: 没有那个文件或目录

[08/13/23 10:35:27] [SSH] Checking java version of java
[08/13/23 10:35:28] [SSH] java -version returned 11.0.19.
[08/13/23 10:35:28] [SSH] Starting sftp client.
[08/13/23 10:35:28] [SSH] Copying latest remoting.jar...
Source agent hash is 25B899E9C1FD1001F55EF1A8DB224323. Installed agent hash is 25B899E9C1FD1001F55EF1A8DB224323
Verified agent jar. No update is necessary.
Expanded the channel window size to 4MB
[08/13/23 10:35:28] [SSH] Starting agent process: cd "/builds" && java  -jar remoting.jar -workDir /builds -jar-cache /builds/remoting/jarCache
8月 13, 2023 6:35:28 下午 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
信息: Using /builds/remoting as a remoting work directory
8月 13, 2023 6:35:28 下午 org.jenkinsci.remoting.engine.WorkDirManager setupLogging
信息: Both error and output logs will be printed to /builds/remoting
<===[JENKINS REMOTING CAPACITY]===>channel started
Remoting version: 3107.v665000b_51092
Launcher: SSHLauncher

其中中文字符已经正常显示。

运行流水线任务,查看输出日志的中文是否正常:

Running 29 on http://192.168.22.211:7083/
[Pipeline] echo
Running 29 on http://192.168.22.211:7083/
[Pipeline] echo
INFO: 查找需要编译发布的模块列表 ....
[Pipeline] echo
INFO: GIT_COMMIT:3fe9568191bb5a6544d43b9d352f14df04f21d7c GIT_PREVIOUS_COMMIT:3fe9568191bb5a6544d43b9d352f14df04f21d7c GIT_PREVIOUS_SUCCESSFUL_COMMIT:04ca72711d1a95d08f63e11c0cf2c7bfa9c82097
[Pipeline] sh
+ env
JENKINS_HOME=/bitnami/jenkins/home
GIT_PREVIOUS_SUCCESSFUL_COMMIT=04ca72711d1a95d08f63e11c0cf2c7bfa9c82097

中文已经正常显示。


总结

网上大多此类问题,都归类为Agent端的 LANG 语言环境变量问题设置错误导致,其实也有可能是 Jenkins Server 接收流水线任务日志上报,没有正确解析为 UTF-8 字符导致的。

此次问题的根因出现在 Jenkins Server 的运行时环境,没有正确设置Java运行环境字符编码为 UTF-8 。

标签:JENKINS,GIT,Console,name,##,乱码,jenkins,Jenkins
From: https://www.cnblogs.com/TopGear/p/17626944.html

相关文章

  • 关于hive的字段注释乱码解决
    今天我发现我的DBeaver执行完sql后,表的注释乱码,深究下来是要去设置hive的编码,要不注释是乱码。教程:hive设置中文编码格式utf-8_hive建表指定字符集_2021xyz666的博客-CSDN博客......
  • 解决zabbix乱码问题
    上述的图标数据,下面的小白框表示乱码含义,是因为我们改了zabbix的语言为中文服务器需要安装字体[root@zabbix-server~]#yuminstall-ywqy-microhei-fonts[root@zabbix-server~]#cp/usr/share/fonts/wqy-microhei/wqy-microhei.ttc/usr/share/fonts/dejavu/DejaVuSans......
  • IDEA/Android Studio的gradle控制台输出中文乱码问题解决
    原文地址:IDEA/AndroidStudio的gradle控制台输出中文乱码问题解决-Stars-One的杂货小窝在项目中,有使用到Gradle自定义脚本,会有些输出日志,但是输出中文就变成乱码了..本篇就介绍下解决方法乱码效果如下图所示步骤我是window系统,不知道其他系统会不会出现这个问题乱......
  • Jenkinsfile使用k8s agent构建失败:Container jnlp was terminated (Exit Code: 1, Rea
    问题描述Jenkinsfile使用k8sagent构建失败jenkins报错截图:查看pod app-system-23-wmx8b-5lnl2-lxvlr的jnlp容器日志:分析处理一般构建失败大都是jnlp容器问题。经以下日志分析发现jenkins主节点和slave节点的jdk版本不一致导致该提示JavaJDK版本不对:hudson/slaves/SlaveComputer......
  • idea实用插件推荐(1)-Grep Console
    1.简介GrepConsole可以根据日志等级设置不同的颜色,效果如下:安装点击File->Settings在搜索框里输入GrepConsole,点击install即可安装使用安装成功后,在idea控制台右键点击ShowGrepConsoleStatisticsinConsole,即可设置对应日志级别的颜色公众号:1号程序员,关注回复B0......
  • docker-安装Jenkins
    确保Docker已经安装:在终端中运行以下命令来检查Docker是否已经正确安装:docker--version如果你看到了Docker的版本信息,那么说明已经正确安装。创建一个Jenkins数据目录:在终端中创建一个目录来保存Jenkins数据,例如:mkdirjenkins_home这个目录将用于在容器......
  • 关于dev c++显示中文不显示,乱码和生成的可执行文件中文乱码
    1.不显示中文工具----编译器选项----显示-----去掉底下的复选框(第一个consolas下面)2,运行窗口中文乱码方法:1、工具—编译选项2、在第一个框中填入-fexec-charset=gbk3、勾选“编译器加入以下命令”4、重新编译一次以后运行。  ......
  • 构建基于 Docker + Jenkins + Sahi 的 Web UI 自动化测试环境
    Docker介绍Docker号称是下一代的虚拟机,它在启动和创建速度、性能、移植性等方面均优于传统虚拟机。Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎。它能够让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实......
  • Jenkins +nginx 搭建前端构建环境
    欢迎访问幸福拾荒者,一个前端知识总结分享平台,与大家一起共同成长共同进步!......
  • INFINI Labs 产品更新 | Easysearch 支持 SQL 查询、Console 告警功能支持邮件等多渠
    INFINILabs产品又更新啦~。本次更新概要如下:Easysearch新增SQL插件和JDBC驱动,支持SQL查询,支持SQL常用函数等;Console针对告警功能做了升级优化,新增了邮件渠道,支持自定义邮件服务器配置,以及支持飞书、钉钉、企业微信、Discord、Slack等多渠道Webhook发送告警通知,优化......