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

Continuous integration 基于我的依赖项列表的SHA1在Gitlab CI中进行依赖项缓存,continuous-integration,gitlab-ci,Continuous Integration,Gitlab Ci,我正在使用Gitlab CI在PHP应用程序中进行linting和测试工作,大部分时间都是由Composer安装包来完成的 因为我们每小时有几个管道,这相当于composer从任何地方下载大量代码所损失的巨大带宽(和时间) 我们开始研究gitlab ci中的依赖缓存,但它通常只是反复下载相同的东西。是否有一种基于composer.lock的哈希在管道之间共享缓存的方法 我们正在运行DigitalOcean的一键式gitlab服务器 我们已经尝试过使用这些设置,但没有成功 variables:

我正在使用Gitlab CI在PHP应用程序中进行linting和测试工作,大部分时间都是由Composer安装包来完成的

因为我们每小时有几个管道,这相当于composer从任何地方下载大量代码所损失的巨大带宽(和时间)

我们开始研究gitlab ci中的依赖缓存,但它通常只是反复下载相同的东西。是否有一种基于composer.lock的哈希在管道之间共享缓存的方法

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

我们已经尝试过使用这些设置,但没有成功

variables:
  COMPOSER_CACHE_SHA1: "sha1sum composer.lock"

cache:
  key: "eval $COMPOSER_CACHE_SHA1"

我们在上面尝试的一切都是使用命令的变体而不是命令的输出进行缓存。

经过一段时间的搜索,我决定使用基于网络的只读内容可寻址文件系统编写自己的实现。为了防止这个答案被标记为自我广告,完全公开:我将作为一个单独的应用程序解决这个问题,并欢迎合并请求。如果有人感兴趣,我会添加链接。

Gitlab CI有这样的选项,它叫做cache:key:files 在GitLab v12.5中引入。 看

cache:key:files关键字通过以下方式扩展cache:key功能: 使重用某些缓存变得更容易,并且重建它们的频率更低, 从而加快后续管道运行

包含cache:key:files时,还必须列出项目文件 用于生成密钥的,最多两个文件。这个 cache key是根据最近的提交(最多)计算的SHA校验和 到两个,如果列出了两个文件),则更改给定文件。如果 在任何提交中均未更改任何文件,默认为回退键


你好@tvanriel,我对你感兴趣。你有更新吗?不幸的是没有。太好了!而且,如果您在文件校验和之外还想输入分支名称或步骤名称,那么也会出现这种情况。
variables:
  COMPOSER_CACHE_SHA1: sha1sum composer.lock

# Cache libraries in between jobs
cache:
  key: "$COMPOSER_CACHE_SHA1"
cache:
  key: "$(sha1sum composer.lock)"
cache:
  key:
    files:
      - composer.lock
  paths:
    - vendor/