基于我的依赖项列表的SHA1在Gitlab CI中进行依赖项缓存

时间:2019-05-14 07:05:06

标签: continuous-integration gitlab-ci

我正在使用Gitlab CI在PHP应用程序中进行加载和测试工作,而大多数时间是由Composer安装软件包花费的。

因为每小时我们有多个管道,所以作曲家仅从各处下载大量代码就浪费了大量带宽(和时间)。

我们开始研究gitlab ci中的伪装缓存,但它通常仍然只是一遍又一遍地下载相同的内容。有没有一种方法可以根据composer.lock的哈希值在管道之间共享缓存?

我们正在运行DigitalOcean的一键式gitlab服务器。

我们已经尝试使用这些设置,但是没有运气。

variables:
  COMPOSER_CACHE_SHA1: "sha1sum composer.lock"

cache:
  key: "eval $COMPOSER_CACHE_SHA1"
variables:
  COMPOSER_CACHE_SHA1: sha1sum composer.lock

# Cache libraries in between jobs
cache:
  key: "$COMPOSER_CACHE_SHA1"
cache:
  key: "$(sha1sum composer.lock)"

我们上面尝试的所有操作都只是使用命令的变体而不是命令的输出来缓存。

2 个答案:

答案 0 :(得分:0)

经过一段时间的搜索,我决定使用基于网络的只读内容可寻址文件系统编写自己的实现。为了防止将此答案标记为自我宣传,请进行全面披露:我将其作为单独的应用程序解决,欢迎合并请求。如果有人感兴趣,我将添加该链接。

答案 1 :(得分:0)

Gitlab CI有这样的选项,它称为cache:key:files 在GitLab v12.5中引入。 参见https://docs.gitlab.com/ee/ci/yaml/README.html#cachekey

cache:key:files关键字通过以下方式扩展了cache:key功能: 使重用某些缓存并减少重建频率变得更加容易, 这样可以加快后续管道的运行速度。

当包含cache:key:files时,还必须列出项目文件 用于生成密钥的文件,最多两个文件。的 缓存键是根据最新提交(向上)计算得出的SHA校验和 到两个(如果列出了两个文件)更改了给定的文件。如果 在任何提交中都没有更改文件,后备键为默认值。

cache:
  key:
    files:
      - composer.lock
  paths:
    - vendor/