草庐IT

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

coder 2023-08-15 原文

我已经使用 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="" 找到这个文件,然后文件关联运行="">

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

python .\Scripts\CreateBuildNumber.py <= 使用="" path="" 查找="">

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

更新:

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 - 无法在 Jenkins 中运行 python 脚本的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  9. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

  10. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

随机推荐