Github Actions如何实现不同分支工作流运行之间的依赖缓存?
问题原因
- GitHub Actions 缓存默认存在访问范围限制:普通功能分支生成的缓存,仅允许同一分支的后续工作流、该分支提交的PR关联工作流读取,其他分支/其他PR的工作流默认无法读取;只有默认分支(通常是master/main)生成的缓存,支持所有工作流读取。
- 你的现有配置存在语法错误:
cache步骤的key配置末尾多了一个多余的闭合大括号},会导致key解析异常,也是缓存匹配失败的原因之一。
解决方法
- 先修正配置语法错误,删除key末尾多余的大括号
- 可以新增
restore-keys配置,指定和依赖文件绑定的匹配规则,只要requirements.txt无变更,就能优先匹配到对应缓存 - 先在默认分支跑一次工作流生成初始缓存,后续所有分支只要requirements.txt没有改动,都可以直接复用这个缓存,不需要重新安装依赖。如果你的默认分支是master,可以临时去掉工作流中
branches-ignore里的master规则,跑一次CI生成缓存后再还原配置即可。
修正后的工作流配置参考
name: ci on: pull_request: types: [opened, synchronize] branches-ignore: - "master" - "staging" push: branches-ignore: - "master" - "staging" jobs: run-tests: name: Run tests runs-on: ubuntu-latest steps: - name: Set up Python 3.8 uses: actions/setup-python@v2 with: python-version: 3.8 - name: Checkout repository uses: actions/checkout@v2 - name: Cache dependencies uses: actions/cache@v3 # 可保留v2版本,v3对跨分支缓存的兼容性更稳定 with: path: ${{ env.pythonLocation }} key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }} restore-keys: | ${{ env.pythonLocation }}- - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install -r requirements.txt
内容的提问来源于stack exchange,提问作者everspader
相关产品推荐
相关产品推荐

