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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)的主要内容,如果未能解决你的问题,请参考以下文章

克隆到子目录时的 SonarQube Jenkins/git 集成

Jenkins 教程:使用 Ngrok 配置(SCM)Github 触发器和 Git 轮询

带有 git 存储库的 Maven 发布插件忽略 scm.user scm.password

git clone 仅在新更改和存档 scm 上

使用通用 Webhook 参数检出 bitbucket 拉取请求的 GIT SCM 配置

Jenkins 中的 Maven 发布问题