Windows START 命令在 Jenkins Pipeline 中无法工作

3
我在脚本中有以下代码。
echo Trying to kill all node processes.
taskkill /f /im node.exe

echo Running the application...
start npm run prod

echo Success...

如果我在命令提示符中打开并运行脚本,它可以正常运行,但是当我从Jenkins流水线运行时,它无法启动npm run进程。奇怪的是构建成功了。
有人可以帮助我解决这个谜题吗? 谢谢。 更新-1 这是Jenkins的输出。
up to date in 23.58s
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deployment)
[Pipeline] bat
[ABC Pipeline] Running batch script
*************************************
    Build Started
    @author: 
*************************************
Trying to kill all node processes.
ERROR: The process "node.exe" not found.
Running the application...
Success...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Automation Testing)
[Pipeline] echo
Testing...
[Pipeline] echo
Tests passed!
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

更新 - 2 npm 文件扩展名为 .cmd,适用于 Windows 10 和 Jenkins 2.89.4。


你收到了什么错误日志? - Gokul Nath KP
没有错误。每个消息都被正确地打印出来,但是某种方式启动没有起作用。 - Bilbo Baggins
我曾经尝试启动计算器来做类似的事情。在启动进程后,我没有注意到进程已经开始运行,直到我加了“start-sleep 5”的命令。进程确实已经启动,但是在Jenkins完成后停止了。我正在努力找出原因。 - Vladimir Bundalo
npm 不是可执行文件,而是批处理文件。因此,请使用 call npm run prod,最好使用完全限定名称的 npm 批处理文件,即路径 + 名称 + 扩展名。请参见此答案,其中解释了从批处理文件中运行批处理文件的 4 种方法。我从未安装过 NPM 包,也没有任何提问者发布过名为 npm 的文件的文件扩展名。我真的很想知道 npmnpm.bat 还是 npm.cmd。@BilboBaggins,您能否在评论中发布文件 npm 的文件扩展名或编辑您的问题并添加文件扩展名? - Mofi
@Mofi 我更新了我的问题,它是一个 .bat 文件。你能否建议/解释一下你刚才说的关于不杀死节点的方法?我如何从命令行发送关闭事件消息给 node.exe? - Bilbo Baggins
显示剩余4条评论
1个回答

2

Windows服务无法打开新的控制台窗口,但是START命令可以做到这一点。因此,如果您将Jenkins作为服务运行,则无法正常工作。但是,如果您简单地跳过START命令,只使用npm run prod就足够了。

编辑:

好的,这里有一个解决方法:如果您确实需要使用start命令,可以使用任务计划程序创建任务。在其中,您可以放置任何批处理代码或者只是指向一个.bat文件。使用Schtasks /run /TN TaskName从Jenkins执行您的任务即可。


1
是的,这是事实,但如果我只删除“START”,它将在我的Jenkins中运行,因此作业永远不会结束。 - Bilbo Baggins
非常感谢,这个答案比Jenkins文档中的要简单得多。 - Merlyn007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接