Jenkins部署之不识别python

Jenkins部署之 不识别python


前言

最近在使用jenkins部署自动化android打包。

有时间可以写关于jenkins使用的文章。

本文就是记录一些遇到的问题,不枉查了一些时间。



问题

配置jenkins后,使用windows命令行时,执行

1
py -3 script.py

报错:大概意思是,py命令可识别python 2,但是不识别 python 3

在执行

1
python3 script.py

报错:python3 不是内部或外部命令



解决

表象

解决的方案有很多]

  1. 使用python3的时候,对于调用的python可执行程序及脚本,使用绝对路径

    1
    xxx\xxx\python.exe xxx\xxx\script.py
  2. 将python3路径的python.exe路径加入到 jenkins的环境变量中

    1
    Jenkins(根目录) -> Manage Jenkins(管理) -> Global Attribute(全局属性) -> Environment variables(环境变量) -> new(新增) -> 添加 键值对


根源

如果单纯想解决问题,上面的方法是完全可以解决的。

但是有几个缺点:

  1. 不通用,通常这些打包脚本都是普适于所有机器;在这台机器上要把所有脚本都修改一遍
  2. 无法使用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。

查看注册表方法:

1
开始菜单右键 -> 运行 -> regedit

系统变量 HKEY_LOCAL_MACHINE -> SOFTWARE -> PythonCore

个人变量 HKEY_CURRENT_USER -> SOFTWARE -> PythonCore

改完了还是重启一下