Jenkins 构建 React 项目时为啥一直卡在 npm run build?

Designer°静依 阅读 17

我在 Jenkins 上部署一个 React 项目,本地能正常 build,但 Jenkins 构建时老是卡在 npm run build 这一步,日志也不报错,就是不动了。试过加 –verbose 也没用。

项目里有个组件是这样写的:

import React from 'react';

const App = () => {
  return (
    <div className="app">
      <h1>Hello Jenkins!</h1>
    </div>
  );
};

export default App;

Node 和 npm 版本跟本地一致(v18.17.0 / 9.6.7),Jenkins 跑在 Docker 里。是不是内存不够?还是环境变量没配对?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
Good“尚斌
这个问题我遇到过,基本可以确定是npm在构建过程中等待交互式输入导致的。

问题根源

npm在非TTY环境下(也就是没有终端交互的情况下)会卡住,尤其是执行某些scripts的时候。Jenkins在Docker里运行构建任务时,默认就是非交互模式,但你的package.json里的build命令或者依赖安装过程中可能有些地方在等输入。

解决方案

在Jenkins的构建脚本里加环境变量:

export CI=true
export npm_config_loglevel=verbose

# 然后执行构建
npm install
npm run build


CI=true 这个环境变量会让npm自动进入非交互模式,很多卡住的问题都是因为缺这个。

另一个可能的原因

如果上面不行,检查一下你的package.json里有没有这种写法:

"scripts": {
"build": "react-scripts build",
// 或者
"build": "node build.js"
}


有些项目会用react-scripts或者自定义的node脚本,这些在某些情况下也会卡。如果你是用create-react-app或者类似脚手架创建的,试试改成:

npm run build -- --no-interactive


内存问题

你说得对,内存也可能是一部分原因。Docker容器默认内存限制可能比较小,Node.js在build时比较吃内存。在Jenkins的Docker启动参数里加一下:

docker run -m 2g ...


给到2G左右比较稳妥。

排查建议

先试CI=true这个,绝大部分情况下加了就好了。如果还不行,把npm run build改成手动分步执行,看看具体卡在哪一步:

# 先清理
rm -rf node_modules package-lock.json

# 安装依赖用 npm ci 更快更稳定
npm ci

# build分步看
npm run build --verbose 2>&1 | tee build.log


npm cinpm install 更适合CI环境,它直接从package-lock.json安装,不会产生交互。
点赞
2026-03-14 00:00