前言
最近在使用jenkins部署自動化android打包。
有時間可以寫關於jenkins使用的文章。
本文就是記錄一些遇到的問題,不枉查了一些時間。
問題
配置jenkins後,使用windows命令行時,執行
py -3 script.py
報錯:大概意思是,py命令可識別python 2,但是不識別 python 3
在執行
python3 script.py
報錯:python3 不是內部或外部命令
解決
表象
解決的方案有很多]
- 使用python3的時候,對於調用的python可執行程序及腳本,使用絕對路徑
xxx\xxx\python.exe xxx\xxx\script.py
- 將python3路徑的python.exe路徑加入到 jenkins的環境變量中
Jenkins(根目錄) -> Manage Jenkins(管理) -> Global Attribute(全局屬性) -> Environment variables(環境變量) -> new(新增) -> 添加 鍵值對
根源
如果單純想解決問題,上面的方法是完全可以解決的。
但是有幾個缺點:
- 不通用,通常這些打包腳本都是普適於所有機器;在這臺機器上要把所有腳本都修改一遍
- 無法使用py命令,跟第一條普適性類似
因爲,上面解決方法只能說是繞行,不能算是從根源解決。
實際上,通過jenkins部署時輸出的日誌,也可以分析出一些。
在構建時,最上面輸出了一行 Running as SYSTEM,即使用系統環境變量來執行命令。
查看環境變量,發現python3的路徑都放在上面 Administrator的用戶變量中,並不是在下面的系統變量。
但是,在電腦執行命令行,默認也使用了Administrator用戶執行,所以能找到python3。
所以,如果想使用python3,就可以將python3路徑也加到系統變量中,
但是python可執行程序,無論2還是3,都是python.exe,需要自己處理一下(可以複製一份改名成 python2.exe 或 python3.exe)
接下來,是處理 py命令,py.exe 位於 C:\Windows ,它解析不同版本是通過註冊表來查詢的位置,所以,需要修改註冊表內容來讓py命令可以查找到各版本python。
查看註冊表方法:
開始菜單右鍵 -> 運行 -> regedit
系統變量 HKEY_LOCAL_MACHINE -> SOFTWARE -> PythonCore
個人變量 HKEY_CURRENT_USER -> SOFTWARE -> PythonCore
改完了還是重啓一下