如何在GitHub Cache Action中将缓存键输出至GITHUB_OUTPUT?
GitHub Actions缓存键无法跨任务复用的原因及解决办法
为什么官方actions/cache不输出缓存键?
官方的actions/cache Action从设计上就没有把缓存键作为输出参数暴露出来。它的核心功能是根据你配置的key和restore-keys去匹配、恢复或保存缓存,整个过程中不会主动把计算后的hashFiles结果,或是最终命中的缓存键传递给后续步骤——因为它的定位是完成缓存操作,而非提供缓存键的管理能力。
解决办法:提前手动计算并传递缓存键
既然无法从缓存Action直接拿到键名,你可以在第一个任务中提前手动计算缓存键,然后通过GitHub Actions的输出机制把这个键传递给后续任务使用,这样就能避免重复执行hashFiles操作。
示例工作流配置:
jobs: build-and-cache: runs-on: ubuntu-latest outputs: cache-key: ${{ steps.calculate-key.outputs.cache-key }} # 跨任务传递需在job级别定义outputs steps: - name: Checkout code uses: actions/checkout@v4 - name: Calculate cache key id: calculate-key run: | # 直接用GitHub的hashFiles函数计算,和缓存Action里的参数保持一致 echo "cache-key=my-deps-cache-${{ hashFiles('package-lock.json', 'yarn.lock') }}" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v3 with: path: node_modules key: ${{ steps.calculate-key.outputs.cache-key }} restore-keys: | my-deps-cache- # 第二个任务,直接复用之前计算好的缓存键 use-cache: needs: build-and-cache runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Restore cache using precomputed key uses: actions/cache@v3 with: path: node_modules key: ${{ needs.build-and-cache.outputs.cache-key }} restore-keys: | my-deps-cache- - name: Verify cache run: echo "Successfully restored cache with key: ${{ needs.build-and-cache.outputs.cache-key }}"
补充说明
如果你的需求是获取实际命中的缓存键(比如匹配了restore-keys里的前缀键,而非你指定的key),官方actions/cache只提供了cache-hit这个布尔型输出(用来判断是否命中了精确匹配的缓存),无法拿到具体的命中键名。这种场景下,你可能需要使用第三方缓存Action,或是自行读取缓存存储的元数据,但这会增加复杂度。
内容的提问来源于stack exchange,提问作者Praytic
相关产品推荐
相关产品推荐

