我有一个CI,它会在每次创建拉取请求和推送新的提交时运行。该CI会安装Python依赖并运行一些测试。我使用两个不同的requirements.txt文件,因为其中一个包含更重的软件包,并且它们在Docker中处理方式不同。
我试图使用
是否有办法在workflow运行之间缓存依赖项?这样,如果requirements没有发生变化,则可以通过一个分支中CI创建的缓存来供另一个分支使用吗?
查看运行于两个不同分支的工作流日志,缓存键是相同的:
我试图使用
actions/cache@v2
操作来缓存这些依赖项,但据我所了解,它仅在同一分支的运行之间进行缓存。因此,例如当我创建一个新的PR时,缓存将无法从另一个分支检测到,而所有内容都将从头开始安装。是否有办法在workflow运行之间缓存依赖项?这样,如果requirements没有发生变化,则可以通过一个分支中CI创建的缓存来供另一个分支使用吗?
查看运行于两个不同分支的工作流日志,缓存键是相同的:
- 位于
branchA
的工作流
Cache not found for input keys: /opt/hostedtoolcache/Python/3.8.12/x64-03a86b868f006751e123da18168c989ab4c3c2713de4f5c87cf732ffbb6fb4ae-cd1b416332d9d5b55f413e2bd74c2efce6107aef1ce3f497fa5a81b9abc83deb
branchB
中的工作流程
Cache not found for input keys: /opt/hostedtoolcache/Python/3.8.12/x64-03a86b868f006751e123da18168c989ab4c3c2713de4f5c87cf732ffbb6fb4ae-cd1b416332d9d5b55f413e2bd74c2efce6107aef1ce3f497fa5a81b9abc83deb
- 这是我的工作流程:
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@v2
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-ml.txt') }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install -r requirements-ml.txt