1.背景
在linux机器上npm run build成功,把脚本放在jenkins上执行失败
2.排查
- 上面的报错显示了child_process.js报错,猜想跟子进程有关,然后去看了下前端自己写的build.js文件,然后发现报错的代码
const { execSync } = require('child_process')
const result = execSync('react-app-rewired build')
- 从截图来看,报错就是这2句产生的,查了下child_process js库,代码就是起了同步进程执行代码
- 之后百度和谷歌后,找到解决方案
https://blog.csdn.net/freeiceflame/article/details/43018567
https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+build
- 也就是说起了一个子进程后没有关闭文件描述符,被jenkins kill掉,但是react-app-rewired build语句实际上是执行成功的,也可以看到build完的静态文件
- 解决方法也可以从上面链接中获取到。只需把npm run build改成daemonize -E BUILD_ID=dontKillMe /usr/local/bin/npm run build (命令只能是绝对路径)