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版本中此問題已經修復

相關文章
相關標籤/搜索