无法在Jenkins中运行python脚本

时间:2018-01-23 10:31:23

标签: python jenkins windows-10

我已经使用Jenkins几年了,最近买了一台新的Windows 10 PC。我安装了Jenkins 2.89.2,Visual Studio 2017和Python 3.6,并从我以前的Windows 7 PC中复制了几个Jenkins作业。

我遇到的问题是,自由式Jenkins作业中的所有python脚本现在什么都不做。

我有类似的命令行批处理文件,它们运行这些python脚本,可以在新PC上的命令窗口中正常工作。

我还检查了与import os direc = raw_input("Enter path: ") files = os.listdir(direc) for x in files: fullpath = direc + "/" + x if os.path.isfile(fullpath): hrfilesize = os.path.getsize(fullpath) / 1024 print x,hrfilesize 的文件关联,最后更改了它:

ftype

我的解决方法是这样的:

在Windows 7下运行的示例行:

ftype Python.File Python.File="D:\Python36_64\python.exe" "%L" %* < =使用PATH查找此文件,然后使用文件关联来运行python

替换行需要在Windows 10下运行:

CreateBuildNumber.py< =使用PATH查找python。

如何避免脚本中的显式路径?

更新

python .\Scripts\CreateBuildNumber.py

更多信息

我删除了%PATH%中的。\ Scripts并重新运行了该作业,同时也将demo.py移动到。\ Scripts中,现在没有做任何事情就是错误:

D:\project>assoc | findstr -i python
.py=Python.File
.pyc=Python.CompiledFile
.pyd=Python.Extension
.pyo=Python.CompiledFile
.pyw=Python.NoConFile
.pyz=Python.ArchiveFile
.pyzw=Python.NoConArchiveFile

echo %PATH%
D:\Python36_64;D:\Python36_64\Scripts;.\Scripts;"C:\Program Files\CppCheck";C:\windows\system32

这意味着Windows IS 正在寻找和查找python脚本,但无法执行它们。为什么Windows不采取下一步并使用文件关联来查找要运行的可执行程序,将文件作为参数?

更新

现在一切正常,我不知道为什么。

我最近开始在Jenkins上使用不同的工作,这两年我既没有跑步也没有接触过,而且那个工作没有经过修改。我已经回过头来讨论这个问题并且还原了所有的变化,这个变化也很有效。

我的猜测是Windows 10已经打补丁。

3 个答案:

答案 0 :(得分:0)

我不知道这是否会解决您的问题,但您的PATH环境变量中不应该有相对路径。

从PATH变量中删除。\ Scripts 后,您可以再试一次吗? (别忘了打开一个新的终端,确实获得新的%PATH%值)

答案 1 :(得分:0)

问题是您的PATH变量不包含python脚本的路径。您需要Scripts目录的完整路径。不是相对路径.\Scripts

答案 2 :(得分:0)

“demo.py”给出消息'...未被识别为内部或外部命令'这一事实并不能说服我将您的脚本识别为可执行文件。如果我在命令提示符窗口中输入'turkey.abc',我会得到同样的错误,而且我没有执行'.abc'文件的工具。

我在这里看到两种可能性:

1)在批处理脚本中,可执行扩展有时必须出现在名为PATHEXT的环境变量中。

在Jenkins批处理脚本中,在脚本顶部附近添加一个“set”命令,将运行脚本的环境变量转储到Jenkins构建日志中(可以在调试之后删除set命令)。运行构建。不仅要查看PATH的定义,还要查看PATHEXT的定义。 “.py”是其中列出的扩展之一吗?

我遇到过Perl脚本的这个问题。然而,我正在悄悄地宣称这是因为在我的Windows 10家用电脑上进行测试时我即使没有在PATHEXT中也能成功执行.py脚本,所以这是尝试但可能不是这样的。

2)另一种可能性是运行服务的环境与在桌面上打开命令提示符时获得的环境不同(因为Jenkins服务的运行方式与您登录时的用户不同) 。)

在Jenkins批处理命令中添加“set”也有助于调试它,因为它会向您显示运行Jenkins脚本的环境。然后您可以检查PATH以查看是否找到了脚本文件夹。

也可能只为您的用户安装了Python的文件关联,而不是为所有用户安装(即,在注册表中的HKEY_CURRENT_USER而不是HKEY_LOCAL_MACHINE)。这很难转储到你的Jenkins日志中 - 'reg'命令会这样做,但它会花费你很多尝试来获得你需要的一切。您可以通过检查注册表来解决这个问题。搜索“.py” - 如果它出现在HKEY_LOCAL_MACHINE中,则不是;如果它出现在HKEY_CURRENT_USER中,至少是问题的一部分。