jenkins上npm run build失败

1.背景

在linux机器上npm run build成功,把脚本放在jenkins上执行失败

2.排查

企业微信截图_b7096be0-40eb-4aec-acd3-d5b70a22ed53.png

  • 上面的报错显示了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

企业微信截图_7553fd59-4150-4b0f-b8be-adff38f180f3.png

  • 也就是说起了一个子进程后没有关闭文件描述符,被jenkins kill掉,但是react-app-rewired build语句实际上是执行成功的,也可以看到build完的静态文件
  • 解决方法也可以从上面链接中获取到。只需把npm run build改成daemonize -E BUILD_ID=dontKillMe /usr/local/bin/npm run build (命令只能是绝对路径)

企业微信截图_bce10555-4754-44f3-8db0-0058dd29eace.png