python - 无法在 Jenkins 中运行 python 脚本

标签 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 的命令窗口中工作得很好。

我还检查了与 ftype 的文件关联,并最终更改了它:

ftype Python.File
Python.File="D:\Python36_64\python.exe" "%L" %*

我的解决方法是这样的:

在 Windows 7 下运行的示例行:

CreateBuildNumber.py <= 使用 PATH 找到这个文件,然后文件关联运行 python

更换线需要在 Windows 10 下工作:

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

如何避免在我的脚本中使用显式路径?

更新:

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

更多信息

我从 %PATH% 中删除了 .\Scripts 并重新运行了作业,同时将 demo.py 移到了 .\Scripts 中,现在不是什么都不做而是错误:

'demo.py' is not recognized as an internal or external command, operable program or batch file.

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

更新:

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

我最近开始在 Jenkins 上使用一项不同的工作,两年多来我既没有运行也没有接触过,而且没有修改就可以工作。从那以后,我重新审视了有问题的工作并恢复了所有更改,而这一项也有效。

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

最佳答案

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

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

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

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

我在使用 Perl 脚本时遇到过这个问题。但是,由于在我的 Windows 10 家用 PC 上进行测试时,我成功地执行了 .py 脚本,即使它不在 PATHEXT 中,所以我肯定不会声称这一点,所以可以尝试一下,但可能不是这样。

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

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

也有可能只为您的用户安装了 Python 的文件关联,而不是为所有用户安装(即,在注册表的 HKEY_CURRENT_USER 中而不是 HKEY_LOCAL_MACHINE 中)。这更难转储到您的 Jenkins 日志中——“reg”命令可以做到,但您需要多次尝试才能获得所需的一切。您也许可以通过检查注册表来弄清楚。搜索“.py”——如果它出现在 HKEY_LOCAL_MACHINE 中,那不是它;如果它出现在 HKEY_CURRENT_USER 中,那至少是问题的一部分。

关于python - 无法在 Jenkins 中运行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399497/

相关文章:

Python数据框: Create New Column Conditionally Using If Then Else Logic --> "The truth value of a Series is ambiguous"

docker - 如何在Jenkins(Pipeline)中为我的dockercontainer指定开始脚本?

jenkins - 找不到持久卷声明 "jenkins-volume-claim"

Jenkins 没有触发远程构建选项

c++ - 在Win10上用VS2015编译的C++ SDL2程序调试加载时间错误

python - 在 Python 中使用具有可变长度未命名参数的命名参数

python - 关闭上次打开的标签

python - 根据元组列表构建逻辑表达式

python - Win10上的PIL模块保存功能仅返回黑色图像

windows - 安装 JDK 后 Chrome 无法运行