NPM缓存机制
如果使用GitLab CI,即使更换了淘宝NPM源,如果不缓存每次下载结果,每次在runner以容器方式执行yarn install 或 npm ci时还是从网络下载,大一点的项目下载依赖都是几个G,下载完后还要解压到node_modules目录,最后才执行编译,整个过程很耗时。
我的解决方案是把yarn和npm的cache目录缓存到宿主机操作系统,执行yarn install和npm ci时存在的包就不用从网络来下载了,直接解压到node_modules了。
version: '3'
services:
runner:
# gitlab 13.94-ee版本可用如下版本,gitlab runner latest版本不可用
image: gitlab/gitlab-runner:11.3.1
container_name: gitlab-runner
restart: always
volumes:
# gitlab runner生成的配置文件位置,启动后需要修改里面的配置
- /data/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
# 查看yarn默认缓存位置
$ yarn cache dir
# 查看npm默认缓存位置
$ npm config get cache
# 检验一下安装的包是否在对应目录
$ yarn add axios
$ ls -al /usr/local/share/.cache/yarn/
$ npm i react
$ ls -al /root/.npm/
如果你修改过npm全局安装位置,请修改下面文件的挂载路径。我这里是用的容器执行编译步骤,容器很干净,没有任何特殊设置,所以用默认位置。
gitlab runner config.toml文件如下。
concurrent = 5
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "docker runner"
url = "https://gitlab.xxx.com/"
token = "xxxxx"
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:20.10.14"
privileged = true
disable_cache = false
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/data/gitlab-runner/data:/builds","/root/.m2:/root/.m2","/root/.yarn_cache:/usr/local/share/.cache/yarn","/root/.npm:/root/.npm"]
shm_size = 0
#pull_policy = "if-not-present"
pull_policy = "always"
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]