优化GitLab CI/CD流水线的缓存

69次阅读
没有评论

问题描述

在使用GitLab的CI/CD流水线时,发现每个任务的执行时间比预期的要长。他怀疑问题出在每次都重新获取npm文件,而不是共享node_modules缓存。
除了创建自己的Docker镜像,他想知道如何优化这个GitLab的yaml文件,以减少瓶颈。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

强烈建议使用npm ci代替npm install。安装npm模块的慢部分是确定需要安装的所有内容。如果你提交了package-lock.json并使用npm ci,它将完全跳过这一部分,只需查看锁定文件以下载所需的内容。这样速度会快得多。

方案2

你可以尝试使用--prefer-offline选项来加速npm install。这个选项会尽可能使用本地缓存的模块,而不是从网络上下载。你可以在GitLab文档中找到一个示例:https://docs.gitlab.com/ee/ci/caching/#caching-nodejs-dependencies

方案3

根据你的描述,编译/提取缓存的时间比获取所有npm包的时间还长。这可能是因为缓存的内容太大或者解压缩缓存的过程比较耗时。你可以尝试以下方法来优化:
– 减小缓存的大小,只缓存必要的文件。
– 使用更高效的压缩算法,例如gzip。
– 将缓存存储在更快的存储介质上,例如SSD。

方案4

根据你的回复,你发现prepare任务在做重复的工作。你将prepare任务移除后,工作量减少了一半。虽然这可能不是最优化的解决方案,但已经有了很大的改进。

方案5

优化是相对的,所以你的方案已经是优化过的了。不要忘记根据实际情况进行测试和调整,以找到最适合你的项目的解决方案。

正文完