PR中GitHub Actions缓存无法访问dev分支已有缓存的问题
问题原因分析
依赖文件路径不匹配:你的PR工作流和合并后置工作流中,指定的依赖文件路径不一致:
- PR工作流安装的是
./back-end/requirements.txt - 合并后置工作流安装的是
./back-end/clientdek/requirements.txt
这导致hashFiles('**/requirements.txt')在两个工作流中计算的哈希值不同(因为匹配到的文件集合不一样),最终生成的缓存Key不一致,PR工作流自然无法命中dev分支创建的缓存。
- PR工作流安装的是
PR工作流的缓存访问规则:GitHub Actions中,PR工作流默认只能读取**基准分支(dev)**的缓存,但前提是缓存Key完全匹配。即使你确认dev分支存在对应Key的缓存,只要PR工作流生成的Key和dev分支的不一致,就无法命中。
解决方案
方案1:统一依赖文件路径,保证缓存Key一致
修改两个工作流中的依赖文件路径,确保指向同一个requirements.txt:
- 如果你实际需要的是
./back-end/requirements.txt,则修改合并后置工作流的安装命令:- name: Installing dependencies if the cache doesn't hit if: ${{ steps.cache-pip.outputs.cache-hit != 'true' }} run: pip install -r ./back-end/requirements.txt - 反之,如果需要的是
./back-end/clientdek/requirements.txt,则修改PR工作流的安装命令:- name: Install dependencies run: | python -m pip install --upgrade pip pip install -r ./back-end/clientdek/requirements.txt pip install pylint
同时,建议将hashFiles的路径改为精确匹配,避免匹配到多个requirements.txt导致哈希值异常:
key: ${{ runner.os }}-pip-${{ hashFiles('./back-end/requirements.txt') }}
方案2:显式指定PR工作流读取基准分支缓存的规则
如果你的PR分支可能修改requirements.txt,但希望在未修改时命中dev分支的缓存,可以调整restore-keys,优先匹配基准分支的缓存Key:
在PR工作流的缓存步骤中,添加基于基准分支的restore key:
- name: Cache pip packages id: cache-pip uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('./back-end/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip-${{ github.base_ref }}- ${{ runner.os }}-pip-
这里github.base_ref是PR的基准分支(即dev),确保PR工作流在自身Key不匹配时,尝试读取dev分支生成的缓存。
方案3:确认PR工作流的缓存读取权限
如果你的仓库是私有仓库,且PR来自fork分支,需要在仓库设置中开启相关权限:
- 进入仓库的
Settings>Actions>General - 在
Workflow permissions部分,勾选Read and write permissions - 同时在
Fork pull request workflows from outside collaborators部分,选择Send write tokens to workflows from fork pull requests
验证步骤
修改完成后,按以下步骤验证:
- 向dev分支提交一个无
requirements.txt修改的PR - 查看PR工作流中
Checking existence of pip cache步骤的输出,确认cache-hit为true - 如果仍未命中,检查两个工作流生成的缓存Key是否完全一致(可以在工作流日志中打印Key值:
echo "Cache key: ${{ runner.os }}-pip-${{ hashFiles('./back-end/requirements.txt') }}")
内容的提问来源于stack exchange,提问作者KrabbyPatty
相关产品推荐
相关产品推荐

