jenkins+gradle+python 引數化構建 編碼問題
我的 自動化構建平臺使用的是jenkins+ gradle + python實現的。其中,jenkins負責管理搭建構建環境,管理構建歷史等,gradle負責打包android 的 apk,打包完後使用python將apk上傳到伺服器,然後在走介面更新版本資訊等。這是整個流程,但是在傳遞從jenkins輸入的中文版本資訊到python裡面更新介面的時候發現服務端記錄是亂碼,並且返回結果傳遞迴gradle的時候也是亂碼,頭疼了幾天解決。
首先,推薦一個檢視亂碼是啥格式的方法,我解決這些問題就是使用的這個。就是將亂碼複製到一個新的檔案裡面,使用notepad++開啟,右下角就有編碼格式了。
首先檢視jenkins的編碼:
在 jenkins系統管理 ->系統資訊:
這通過這倆個引數可以看到jenkins預設使用的編碼是GBK,然後jenkins執行gradle的task的時候使用的是命令列,那命令列的編碼是不是也有影響呢,保險起見還是看下吧,檢視命令列編碼使用:chcp 命令,如圖:
936代表是 編碼:GBK
也可以在命令列頂部右鍵->屬性檢視,如圖:
也可以看到 936 GBK 。那麼jenkins和命令列的編碼格式是一樣了。
然後是在gradle執行中的亂碼問題:
剛開始因為字串在gradle裡使用的時候是使用命令列呼叫python更新介面指令碼的,所以認為沒有問題,結果中文發現還是亂碼,複製亂碼出去看了下編碼,發現是gb2312格式,那麼gradle就使用的別的格式的編碼,但是這裡我取巧了,直接使用gb2312來解析,然後傳遞給python,如下:
這裡說個別的問題,就是如果直接使用gradle.properties裡面的變數。比如說要在gradle腳本里面使用,那麼,得使用
來解析中文字串才不會有亂碼,但是如果使用命令列傳過來的引數的話編碼和命令列的保持一致就行。
然後就是 命令列執行python指令碼傳遞中文的編碼問題了:
python我使用的2.7,預設編碼是ascii 編碼,直接解析坑定不行,上面我們知道命令列使用的是gbk格式,那麼就使用gbk來解析傳遞進來的引數就好了,如圖:
在執行玩操作後,要將結果返回,這個地方也會有編碼問題,使用如下方式就好:
這樣整個流程上的編碼問題就解決了。