gitlab ci中默认使用node_modules缓存,必要时install更新依赖包
公司中使用的是gitlab
做持续集成的,在处理依赖包node_modules
时有点小问题,不知是每次安装还是缓存比较节省打包时间。
问题
原本是利用cache
配置缓存了npm_cache
,然后在用npm ci
加快install 以来的速度。实际效果也比较好,安装大概在20-30s之前,可以接受。但是不知道为何,项目久了后,ci
的耗时越来越大,达到了不能容忍的一分半的样子。
既然如此,那就可以直接缓存node_modules
路径,毕竟这比直接安装更快,但是假如缓存了node_modules
后,某天又加入了新的第三方以来。此时打包就会出错了,我们还得手动改ci,让此次先ci
,再缓存,实在不是很方便。
于是乎,一种默认使用node_modules
缓存,包依赖更新时,重新ci
或install
的方案就等待实现了。
changes
我们可以通过rules:changes
检查对特定文件的更改来指定何时将任务添加到pipeline
中。
比如:
check:
stage: npm
script:
- npm ci
only:
changes:
- package.json
- package-lock.json
refs:
- test
- release
#打包构建
build:
stage: build
script:
- npm ci
only:
- test
- release
该state
只有在package.json
或者package-lock.json
任意一个文件改动时,才会触发,并添加到pipeline
中,然后再进行第二步build过程。当然没改依赖,改了这两文件中的其他内容也是会触发的。
cache:
paths:
- node_modules/
再配上cache
这样就可以缓存了。
其他
由于build过程中,我们会用到其他第三方插件等会生成缓存在node_modules
中,这会导致每次缓存的东西越来越多,你可以在build阶段后移除掉.cache
文件。比如:
build:
# ......等等
after_script:
- rm -rf node_modules/.cache
当然,有些会加速打包的缓存还是别删了吧,毕竟最终目标都是加速pipeline
的过程。