Jenkins构建步骤无法解析批处理命令[重复]

Posted

技术标签:

【中文标题】Jenkins构建步骤无法解析批处理命令[重复]【英文标题】:Jenkins build step can't parse batch commands [duplicate] 【发布时间】:2018-12-12 01:55:14 【问题描述】:

我正在为 LabVIEW 项目开发构建管道,并且已经可以从批处理文件或 windows cmd 构建 LabVIEW 项目。这个过程非常简单。我正在从 LabVIEW 引擎中调用一些 LabVIEW 代码来构建项目。该过程在批处理脚本中运行,但是第二次我将批处理文件的内容放入 jenkins 构建步骤中,它失败并显示消息。

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

批处理脚本的内容如下:

@echo off
%LabVIEW17% %pBUILD% -- "<path to my project>.lvproj"

其中 %LabVIEW17% 是 LabVIEW.exe 的路径,%pBUILD% 是构建项目的 LabVIEW 代码的路径。格式基于我在这里找到的一些信息:http://www.ni.com/example/30051/en/

为什么 '--' 会从 Jenkins 而不是 cmd 或批处理文件中失败? -- 输入的目的是什么?

【问题讨论】:

这解释得很简单。在批处理文件运行的环境中,没有环境变量LabVIEW17,也没有环境变量pBUILD,因此第一个非空格分隔的参数字符串是--,这当然不是可执行文件的文件名或要执行的脚本。也许您已经为您的用户帐户定义了两个环境变量,但 Jenkins 正在使用不同的用户帐户运行。 为了澄清起见,我在运行 jenkins 的机器上的系统环境变量中设置了这两个变量。 在Windows系统设置修改后你重启了整台机器或者至少重启了Jenkins?请看What is the reason for '...' is not recognized as an internal or external command, operable program or batch file? 好吧,我现在感觉很笨。但是在重新启动机器和 setx 命令之间,我的问题现在已经解决了。当 Jenkins 作为服务运行时,我必须重新启动机器是很有意义的。这完美地解释了为什么 cmd 和批处理文件都可以工作,因为它们在打开时都会收到环境变量更新,而 jenkins 会一直在后台运行。非常感谢您的帮助。 SETX 仅对SETX 执行后启动的任何新环境生效。任何现有环境都无法访问SETX 创建的新变量。 【参考方案1】:

您的 %LabVIEW17% 和 %pBUILD% 很可能是空的,您的行被解释为:

-- "<path to my project>.lvproj"

尝试在机器级别设置变量,但不仅限于用户。

如果您的 jenkins 是作为服务安装的,它会以管理员/系统的身份执行脚本,并且不会考虑在用户级别设置的环境变量。要在机器级别设置变量,请检查setx 命令。

【讨论】:

Jenkins 当前作为服务安装,所以我尝试了 setx 命令。在 setx 命令的帮助下,我运行了 setx LABVIEW17 %LABVIEW17%。如果我明白这是做什么的,这应该将我的环境变量写入注册表中的主环境。 pBUILD 变量也是如此。在 Jenkins 方面仍然看到同样的错误。

以上是关于Jenkins构建步骤无法解析批处理命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章

jenkins 构建触发器 以及参数的传递

Jenkins 中的自动部署构建失败

构建步骤“执行 Windows 批处理命令”在詹金斯中将构建标记为失败

如何使用Jenkins shell命令复制文件但不包括某些目录[重复]

Jenkins创建新任务

Maven 无法在 jenkins 解析 POM