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

问题缘由

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

  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字符就成乱码了。git

参考:github

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

修复:编码

https://github.com/jenkinsci/git-client-plugin/pull/194操作系统

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

 

处理

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

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

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

 

 

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