如何使用共享包缓存优化基于 Docker 的 CI 运行器
在 Unleashed Technologies,我们使用 Gitlab CI 和 Docker runners 进行持续集成测试。 我们已投入大量精力来加快构建执行速度。 我们所做的优化之一是在所有 CI 作业之间共享一个缓存卷,允许它们共享文件,例如包下载缓存。
配置 Docker runner 非常简单——我们只是简单地放弃了 volumes = ["/srv/cache:/cache:rw"]
进入我们的 config.toml
文件:
concurrent = 6
check_interval = 0
[[runners]]
name = "ut-ci01"
url = "https://gitlab.example.com/"
token = "xxxxxxxxxxxxx"
executor = "docker"
[runners.docker]
tls_verify = false
image = "unleashed/php:7.1"
privileged = false
disable_cache = false
volumes = ["/srv/cache:/cache:rw"]
[runners.cache]
因此,所有 CI 作业都会有一个 /cache
可用目录(映射到 /srv/cache
在 Docker 主机上)。
下一步是让包管理器在作业运行命令时使用这个缓存目录 composer install
或者 yarn install
. 幸运的是,这些包管理器允许我们使用环境变量配置它们的缓存目录:
- 作曲家:
COMPOSER_CACHE_DIR
纱:
YARN_CACHE_FOLDER
国家公园管理委员会:
NPM_CONFIG_CACHE
凉亭:
bower_storage__packages
红宝石:
GEM_SPEC_CACHE
点:
PIP_DOWNLOAD_CACHE
所以我们简单地添加了这些 ENV
中的指令 Dockerfile
s 为我们的基础图像:
ENV COMPOSER_CACHE_DIR /cache/composer
ENV YARN_CACHE_FOLDER /cache/yarn
ENV NPM_CONFIG_CACHE /cache/npm
ENV bower_storage__packages /cache/bower
ENV GEM_SPEC_CACHE /cache/gem
ENV PIP_DOWNLOAD_CACHE /cache/pip
现在,只要作业需要安装包,它就会从我们的本地缓存中提取,而不是从远程服务器下载! 这为我们的构建提供了显着的速度提升。
此快速提示最初发布在 Colin 的博客上,并在获得作者许可的情况下在此处重新发布。