jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)相关的知识,希望对你有一定的参考价值。
问题原因
changelog的获取方式(git-client插件):
- 首先调用git whatchanged命令,读取输出字节流(UTF-8编码的Commit Message)。
- 将字节流解码为字符串然后写入字符文件$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/pull/194
https://github.com/gennady/git-client-plugin/commit/c99c91fcf497e784204398761be5c10f438d0e55
处理
修复很简单,第2步解码时指定UTF-8编码即可。目前已经有人修复了这个问题,并提交了到官方的合并请求。以后的版本中应该会修复。
临时的解决办法是:打包并安装修复版本。可直接用编译好的修复插件包:
以上是关于jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)的主要内容,如果未能解决你的问题,请参考以下文章
克隆到子目录时的 SonarQube Jenkins/git 集成
Jenkins 教程:使用 Ngrok 配置(SCM)Github 触发器和 Git 轮询
带有 git 存储库的 Maven 发布插件忽略 scm.user scm.password