GitLab CI的Kubernetes容器执行npm run build报HookWebpackError错误
解决GitLab CI Kubernetes容器中
npm run build的HookWebpackError问题 问题详情
在GitLab CI的Kubernetes容器中执行npm run build时触发HookWebpackError,提示**"The service is no longer running"**。此前npm install、npm run lint、npm run test均执行正常:
- 使用镜像:
docker.io/library/node:19.3.0-bullseye - 运行用户:非root用户(UID=1000),/working/builds目录具备可写权限
- 错误根源:栈信息指向esbuild-wasm模块,表现类似GitHub Issue #22338但运行环境不同,直接进入容器排查未找到明确方向
错误日志
node@runner-7gbsh-sz-project-9665-concurrent-0c6cv4:~/app$ npm run build -- --output-path=dist > bluefin-ui@0.0.0 build > ng build --output-path=dist Node.js version v19.3.0 detected. Odd numbered Node.js versions will not enter LTS status and should not be used for production. For more information, please see https://nodejs.org/en/about/releases/. - Generating browser application bundles (phase: setup)... ✔ Browser application bundle generation complete. An unhandled exception occurred: The service is no longer running See "/tmp/ng-88rVP9/angular-errors.log" for further details. node@runner-7gbsh-sz-project-9665-concurrent-0c6cv4:~/app$ cat /tmp/ng-88rVP9/angular-errors.log [error] HookWebpackError: The service is no longer running at makeWebpackError (/working/builds/app/node_modules/webpack/lib/HookWebpackError.js:48:9) at /working/builds/app/node_modules/webpack/lib/Compilation.js:3060:12 at eval (eval at create (/working/builds/app/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:115:1) -- inner error -- Error: The service is no longer running at /working/builds/app/node_modules/esbuild-wasm/lib/main.js:786:29 at sendRequest (/working/builds/app/node_modules/esbuild-wasm/lib/main.js:661:14) at start (/working/builds/app/node_modules/esbuild-wasm/lib/main.js:784:9) at Object.transform2 [as transform] (/working/builds/app/node_modules/esbuild-wasm/lib/main.js:841:5) at /working/builds/app/node_modules/esbuild-wasm/lib/main.js:1928:55 at new Promise (<anonymous>) at Object.transform (/working/builds/app/node_modules/esbuild-wasm/lib/main.js:1928:14) at EsbuildExecutor.transform [as esbuildTransform] (/working/builds/app/node_modules/esbuild-wasm/lib/main.js:1751:62) at EsbuildExecutor.transform (/working/builds/app/node_modules/@angular-devkit/build-angular/src/webpack/plugins/esbuild-executor.js:113:21) at async /working/builds/app/node_modules/@angular-devkit/build-angular/src/webpack/plugins/css-optimizer-plugin.js:70:53
项目依赖版本
node@runner-7gbsh-sz-project-9665-concurrent-0xj5hz:~/app$ npm ls bluefin-ui@0.0.0 /working/builds/app +-- @angular-devkit/build-angular@15.0.4 +-- @angular-eslint/builder@15.1.0 +-- @angular-eslint/eslint-plugin-template@15.1.0 +-- @angular-eslint/eslint-plugin@15.1.0 +-- @angular-eslint/schematics@15.1.0 +-- @angular-eslint/template-parser@15.1.0 +-- @angular/animations@15.0.4 +-- @angular/cli@15.0.4 +-- @angular/common@15.0.4 +-- @angular/compiler-cli@15.0.4 +-- @angular/compiler@15.0.4 +-- @angular/core@15.0.4 +-- @angular/forms@15.0.4 +-- @angular/platform-browser-dynamic@15.0.4 +-- @angular/platform-browser@15.0.4 +-- @angular/router@15.0.4 +-- @types/jasmine@4.0.3 +-- @types/node@18.11.17 +-- @typescript-eslint/eslint-plugin@5.44.0 +-- @typescript-eslint/parser@5.44.0 +-- eslint@8.30.0 +-- jasmine-core@4.3.0 +-- karma-chrome-launcher@3.1.1 +-- karma-coverage@2.2.0 +-- karma-jasmine-html-reporter@2.0.0 +-- karma-jasmine@5.1.0 +-- karma@6.4.1 +-- node-addon-api@3.2.1 extraneous +-- node-gyp-build@4.5.0 extraneous +-- pify@4.0.1 extraneous +-- rxjs@7.5.7 +-- tslib@2.4.1 +-- typescript@4.8.4 +-- yocto-queue@0.1.0 extraneous `-- zone.js@0.11.8 node@runner-7gbsh-sz-project-9665-concurrent-0xj5hz:~/app$ npm version { 'bluefin-ui': '0.0.0', npm: '9.2.0', node: '19.3.0', v8: '10.8.168.21-node.8', uv: '1.44.2', zlib: '1.2.13', brotli: '1.0.9', ares: '1.18.1', modules: '111', nghttp2: '1.51.0', napi: '8', llhttp: '8.1.0', uvwasi: '0.0.13', openssl: '3.0.7+quic', cldr: '42.0', icu: '72.1', tz: '2022f', unicode: '15.0', ngtcp2: '0.8.1', nghttp3: '0.7.0' }
解决方案
1. 切换到Node.js LTS版本
Node.js 19是非LTS版本,存在兼容性隐患。Angular 15官方推荐使用Node.js 16.14.x或18.10+的LTS版本,将镜像替换为docker.io/library/node:18.17.0-bullseye(或其他18.x LTS版本),避免非稳定版本的底层bug。
2. 禁用esbuild-wasm,使用本地二进制版本
修改angular.json中的构建配置,强制Angular使用本地esbuild二进制而非wasm版本:
"architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "esbuildOptions": { "binary": true } } } }
同时执行npm install esbuild --save-dev,确保本地安装了esbuild二进制文件。
3. 增加容器资源配额
Kubernetes容器内存不足可能导致esbuild-wasm进程崩溃,在GitLab CI的job配置中提升资源限制:
jobs: build: resources: requests: memory: "2Gi" cpu: "1" limits: memory: "4Gi" cpu: "2"
4. 清理构建缓存
清理npm和Angular的缓存,避免缓存文件损坏导致的问题:
npm cache clean --force rm -rf node_modules package-lock.json npm install npx ng cache clean
内容的提问来源于stack exchange,提问作者jmht
相关产品推荐
相关产品推荐

