Docker中的Drone编译前端项目时报137错误代码

6/27/2020 DockerDrone

记录一下今天遇到的流水线的 Bug,改了老半天,最后才发现问题所在!

# 问题复现

image-20200627001641215

报错: error Command failed with exit code 137

# 环境说明

首先说明报错环境,大致如下:

博客插图

# 原因及解决思路

引起这个报错的具体原因其实是 Drone 编译项目时需要的内存容量超过了 Docker 默认分配的 512mb 容量,一句话就是:容器内存爆掉了!!所以解决办法就是扩大 Drone 内存!

如果系统内存主够的话,直接将容器内存扩大就好,具体方法可以参考此文 (opens new window)设定。

但是如果你像我一样用的云服务器,总共内存就只有可怜 🥺 的 2GB 大小,那你可能只能考虑容器添加 SwapFile,来扩充内存!这是一个思路,因为我用的另一位大佬的开发服务器环境,所以给大佬反馈了这个问题之后,大佬自己解决了,这个思路也是大佬说的。具体解决方案,我没有尝试过,有了解的同学可以补充到评论区,感谢 🙏 ~

# 反思及总结

其实一开始 CI 报错之后我并没有注意到是 Docker 的问题,毕竟 Drone 确实是个可以正常运行的,只是编译的过程中出现错误。而且在编译的过程中 yarn 警告了项目的许多依赖库 outdated ,于是我就以为是依赖库过时导致编译失败。

image-20200627004226901

经过一下午升级相关依赖库及重写部分调用相关 API 的代码,最终尝试在本地编译,编译过程终于没有了警告 ⚠️!!Yes🎉🎉!但是进入流水线之后依旧报错,这时候我才注意到了这个 137 错误代码!!经过一番查询之后这个错误代码是和 Drone 容器内存相关的,于是把问题反馈给了大佬!最后大佬通过添加 swapfile 修复了这个问题!🎉

其实这个问题一个月前便出现了,只是当时自己懒,且很神奇的是当时,第一遍流水线跑不通,重启一次就能跑通!于是懒懒的自己就这样得过且过了!经过一个月,这些没有收敛的问题终究发散到了不得不收拾的地步。其实要是早早修复相关 BUG,今天也不会因为 Outdated 问题 被迷惑了老半天,浪费很多时间最后才查到具体的原因!

image-20200627004447532

总结:已经发散的问题如果不及时解决,一定不可能自动收敛,只会引起更多发散的问题!

# 参考文章

文章 1 (opens new window)

文章 2 (opens new window)