GitHub Actions 找不到缓存

4
我有一个工作流程,它会缓存以下操作的输出结果:
  • 使用 composer.lock 的哈希值来安装 composer
  • 使用 package-lock.json 的哈希值来执行 npm ci
  • 使用 public/**/* 的哈希值来执行 npm run prod
因此,它们可以在后续运行中被重用。
问题是,只有 composer 缓存被命中了,而两个 npm 缓存总是导致 CI 输出中出现消息“未找到输入键的缓存”。
npm ci 代码为例,缓存设置和后续使用由以下两步完成:
- name: Cache node packages
  id: cache-npm-packages
  uses: actions/cache@v2
  env:
    cache-name: cache-node-packages
  with:
    # npm cache files are stored in `~/.npm` on Linux/macOS
    path: ~/.npm
    key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('package-lock.json') }}

- if: ${{ steps.cache-npm-packages.outputs.cache-hit != 'true' }}
  run: npm ci

但是CI的输出显示:
Cache not found for input keys: Linux-build-cache-node-packages-4370b0e1b9396b576e8db83e048ce2efe36557c8c4bae8492253ef706fc8a4bc

尽管在缓存条目列表中:

Image showing list of cache entries

截图还显示,npm run prod 的缓存一直在被重复生成,而没有被重用。
我做错了什么?

你尝试过使用 actions/cache@v3 而不是 v2 吗? - Andrii Bodnar
1个回答

6
我曾经遇到过同样的问题,问题在于分支“A”只能检索“main”分支的缓存或其子分支的缓存。

enter image description here

你的所有缓存都是由拉取请求创建的,正如你可以看到的ref/pull/foo/merge 由拉取请求存储的缓存只能在同一分支上重新运行时访问。

enter image description here

为了解决您的问题,您应该在主分支中运行工作流程一次,这样任何其他操作都可以访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接