仅在Jenkins脚本式流水线执行时触发Webpack编译错误求助
Jenkins脚本式流水线Webpack构建TypeError问题排查
问题概述
在Windows 2019服务器上搭建Jenkins脚本式流水线时,执行Webpack构建命令触发TypeError,但相同命令在Jenkins自由风格任务、代理本地执行均无异常。
错误日志
> webpack --config ./config/webpack-cli-prod.config.js C:\myProject\node_modules\webpack\lib\javascript\JavascriptModulesPlugin.js:143 throw new TypeError( ^ TypeError: The 'compilation' argument must be an instance of Compilation at Function.getCompilationHooks (C:\myProject\node_modules\webpack\lib\javascript\JavascriptModulesPlugin.js:143:10) at SourceMapDevToolModuleOptionsPlugin.apply (C:\myProject\node_modules\webpack\lib\SourceMapDevToolModuleOptionsPlugin.js:50:27) at C:\myProject\node_modules\webpack\lib\SourceMapDevToolPlugin.js:163:53 at Hook.eval [as call] (eval at create (C:\myProject\node_modules\tapable\lib\HookCodeFactory.js:19:10), <anonymous>:100:1) at Hook.CALL_DELEGATE [as _call] (C:\myProject\node_modules\tapable\lib\Hook.js:14:14) at Compiler.newCompilation (C:\myProject\node_modules\webpack\lib\Compiler.js:1122:26) at C:\myProject\node_modules\webpack\lib\Compiler.js:1166:29 at Hook.eval [as callAsync] (eval at create (C:\myProject\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1) at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\myProject\node_modules\tapable\lib\Hook.js:18:14) at Compiler.compile (C:\myProject\node_modules\webpack\lib\Compiler.js:1161:28)
环境信息
- 服务器:Windows 2019
- Node.js版本:16.16.0,npm版本:8.11.0
- Jenkins代理:通过agent.jar连接
已尝试方案
- 升级/移除
html-webpack-plugin,问题未解决 - 更换服务器,保持代理和配置不变,问题复现
- 确认自由风格任务以SYSTEM权限执行无异常,流水线任务权限可能存在差异
当前脚本式流水线代码
node("My-Server"){ dir("C:\\MyProject"){ stage('Pre-Test Build Client (Web)') { dir("aFolder"){ bat 'npm run build-all-prod' // 该脚本会调用webpack构建命令 } } } }
解决方向
1. 强制流水线以SYSTEM权限执行
在流水线中添加环境变量指定执行用户,同时检查任务权限配置:
node("My-Server"){ withEnv(["BUILD_USER_ID=SYSTEM"]) { dir("C:\\MyProject"){ stage('Pre-Test Build Client (Web)') { dir("aFolder"){ bat 'npm run build-all-prod' } } } } }
同时在Jenkins任务的「流水线-高级项目选项」中,确保开启允许SYSTEM用户执行的相关权限。
2. 规避路径转译问题
使用customWorkspace直接指定工作区,替代嵌套dir命令避免路径解析异常:
node("My-Server"){ agent { node { label "My-Server" customWorkspace "C:\\MyProject\\aFolder" } } stage('Pre-Test Build Client (Web)') { bat 'npm run build-all-prod' } }
3. 同步依赖环境
在流水线中添加依赖清理与重新安装步骤,确保环境与本地/自由风格任务一致:
node("My-Server"){ dir("C:\\MyProject\\aFolder"){ stage('Clean & Reinstall Dependencies') { bat 'npm cache clean --force' bat 'rmdir /s /q node_modules' bat 'del package-lock.json' bat 'npm install' } stage('Pre-Test Build Client (Web)') { bat 'npm run build-all-prod' } } }
4. 锁定Webpack版本兼容性
检查项目Webpack版本与Node.js 16.16.0的兼容性,锁定Webpack及相关插件版本(例如webpack@5.74.0),避免依赖树中多版本Webpack导致的实例冲突。
内容的提问来源于stack exchange,提问作者sdev
相关产品推荐
相关产品推荐

