当前位置: 首页 > 后端技术 > Python

关于在Jenkins中使用Python的陷阱

时间:2023-03-26 18:30:57 Python

使用Jenkins进行自动发布有两种使用Python脚本的方法:一种是直接通过Jenkins安装Python相关的插件,然后直接执行Python脚本中的命令施工期间;另一种方式是在Jenkins服务器上安装脚本对应的Python版本,然后在Jenkins页面配置CMD命令执行Python脚本,如pythonxxx.py;因为Jenkins上安装的Python插件不知道Python对应的是什么版本,这里选择第二种方式是在Jenkins服务器上安装Python。中间也是各种折腾,遇到了几个问题:编码问题;python无法识别的问题;找不到依赖的问题;这里不急于解释这些问题是如何解决的。因为姿势不对。这是正确的姿势。这里使用的软件版本:名称版本系统WindowsServer2012R2DatacenterJenkins2.204.1(在ManageJenkins下查看关于Jenkins的版本)Pythonpython-3.8.132-bit(官方版下载地址)pip19.2.3(安装python时选择一起安装)接下来需要注意的是:确保所写脚本对应的python版本与Jenkins上安装的python版本兼容,最好相同(避免某些语法或依赖不兼容);安装python时注意安装路径,最好不要使用中文等特殊字符,以免后期被特殊对待,出现各种不可预知的问题;安装时选择安装pip和ADDTOPATH,如果没有,请自行下载安装pip,并手动添加python和pip环境变量,确保通过cmd命令查看两者的版本时是正确的;如下图所示:写好的python脚本所在的路径也不能有中文等特殊字符。上面提到的编码问题很可能是在pathContainsChinese(这让我浪费时间去理解python的默认编码,最后改了脚本路径);确保在Jenkins服务器上直接通过命令行运行脚本的结果是正常的(如果这里有问题,在Jenkins上执行肯定有问题);如果以上步骤提示找不到某些依赖,将python下的脚本添加到环境变量中,然后通过命令行安装对应的依赖包,pipinstallpackage_name或pip3installpackage_name;注意:如果使用默认包源,安装会比较慢(服务器在国外);这里可以永久替换pip包源。操作步骤如下:打开文件夹,输入路径%appdata%回车,输入的路径类似“C:UsersUserNameAppDataRoaming”;创建一个新文件夹“pip”并进入它;新建文件“pip.ini”并编辑,内容如下:[global]timeout=6000index-url=http://mirrors.aliyun.com/pypi/simple/trusted-host=mirrors.aliyun。com然后通过pip或pip3安装会更快;以上步骤都正常了,现在就可以在Jenkins上执行CMD命令了。这里需要注意的是python和脚本都要使用全路径,或者先定位到脚本所在的目录;例如python安装路径为“C:WorkAppsPythonPython38-32”脚本路径为“E:jenkins_pythonwait_run.py”直接执行CMD命令:C:\WorkApps\Python\Python38-32\python.exeE:\jenkins_python\wait_run.py或者先定位到脚本所在目录,然后执行相应的CMD命令:E:&&cdE:\jenkins_python\wait_run.py&&C:\WorkApps\Python\Python38-32\python.exewait_run.py上面如果不适用python的全路径,很可能会报错——上面说的“pythonnotrecognized”。注意:这不是因为Jenkins不兼容python版本,而是python.exe不在Jenkins执行用户的PATH中,所以即使配置了PATH,Jenkins还是找不到python;至此,在Jenkins上配置的python脚本就可以顺利执行了。如果遇到问题,可以先拆分进行故障排除,节省等待验证的时间。比如上面的Jenkins不识别python,你可以配置CMD命令为“python--version”,发现是路径问题,改成“C:WorkAppsPythonPython38-32python.exe--version”,然后执行一下,发现可以正常运行,然后继续验证下面的问题。我的想法是一定不要被问题包围,而是把它们拆散排列成一列,然后像打怪兽一样一个一个过关(前提是要先确定大方向,否则你会努力通关后发现终点不是你想要的,会很尴尬)。