Angular 12应用使用GitLab Runner执行ng build失败但本地运行正常
问题原因
这个Go运行时报错的核心诱因是GitLab Runner shell执行器的CI运行环境和你手动登录gitlab-runner用户的交互式环境不一致,通常是资源限制、环境变量差异、systemd服务限制三者之一导致Angular构建依赖里的Go编译二进制组件(比如esbuild、sass编译器等)运行异常。
解决步骤
- 第一步:对齐环境变量
在CI脚本的ng build命令前新增env > ci_env.txt,手动登录gitlab-runner用户执行env > local_env.txt,对比两份文件的差异,将交互式环境特有的PATH、NODE_OPTIONS、Golang相关的环境变量在CI脚本中手动设置,示例如下:export PATH=$PATH:/home/gitlab-runner/.local/bin export NODE_OPTIONS="--max-old-space-size=4096" - 第二步:解除Runner的资源限制
如果你的GitLab Runner是通过systemd部署的,修改/etc/systemd/system/gitlab-runner.service(或者对应systemd配置路径),在[Service]段新增以下配置:
修改后执行LimitMEMLOCK=infinity LimitNOFILE=65536 MemoryMax=8Gsystemctl daemon-reload && systemctl restart gitlab-runner生效。 - 第三步:清理构建缓存
在CI脚本中构建前新增清理命令,避免缓存的依赖版本和环境不兼容:rm -rf node_modules package-lock.json dist npm cache clean --force npm install - 第四步:升级兼容版本
如果上述操作无效,可将GitLab Runner升级到和你GitLab服务端主版本一致的最新稳定小版本,部分旧版本Runner的Go运行时和Angular12依赖的前端构建工具存在兼容性问题。
内容的提问来源于stack exchange,提问作者matth3o
相关产品推荐
相关产品推荐

