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的过程。