jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)

时间:2023-03-09 19:32:56
jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)

问题原因

changelog的获取方式(git-client插件):

  1. 首先调用git whatchanged命令,读取输出字节流(UTF-8编码的Commit Message)。
  2. 将字节流解码为字符串然后写入字符文件$JENKINS_HOME/jobs/xxx/builds/xx/changelog.xml文件中。

第2步中,git-client插件现在(最新的1.19.2版本)解码使用的是操作系统默认的编码。Windows默认编码为GBK(chcp命令查看,cp936即GBK),Linux系统默认编码为UTF-8。 如果Slave为Windows,则本身是用UTF8编码的changelog字节流会被用GBK解码,最后获得的changelog字符就成乱码了。

参考:

https://github.com/jenkinsci/git-client-plugin/blob/git-client-1.19.2/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java

修复:

https://github.com/jenkinsci/git-client-plugin/pull/194

https://github.com/gennady/git-client-plugin/commit/c99c91fcf497e784204398761be5c10f438d0e55

处理

修复很简单,第2步解码时指定UTF-8编码即可。目前已经有人修复了这个问题,并提交了到官方的合并请求。以后的版本中应该会修复。

临时的解决办法是:打包并安装修复版本。可直接用编译好的修复插件包:

https://github.com/gennady/git-client-plugin/raw/8383bd7c222b52e26b0d1b395b2eb26766f86cf7/compiled-plugin/git-client.hpi

在git-client 1.19.3版本中此问题已经修复