eve*_*der 14 github github-actions
我有一个 CI,它在创建的每个拉取请求和每次推送新提交时运行。此 CI 安装 Python 依赖项,然后运行一些测试。我使用两个单独的requirements.txt 文件,因为其中一个包含较重的包,并且它们在 Docker 中的处理方式不同。我正在尝试使用actions/cache@v2操作来缓存依赖项,但据我所知,它仅在同一分支中的运行之间进行缓存。因此,例如,当我创建新的 PR 时,不会从另一个分支检测到缓存,并且所有内容都会从头开始安装。有没有办法缓存工作流运行之间的依赖关系?那么,如果需求没有发生任何变化,CI 在一个分支中创建的缓存可以被另一个分支使用吗?
查看在两个不同分支中运行的工作流的日志,缓存键是相同的:
branchACache not found for input keys: /opt/hostedtoolcache/Python/3.8.12/x64-03a86b868f006751e123da18168c989ab4c3c2713de4f5c87cf732ffbb6fb4ae-cd1b416332d9d5b55f413e2bd74c2efce6107aef1ce3f497fa5a81b9abc83deb
Run Code Online (Sandbox Code Playgroud)
branchBCache not found for input keys: /opt/hostedtoolcache/Python/3.8.12/x64-03a86b868f006751e123da18168c989ab4c3c2713de4f5c87cf732ffbb6fb4ae-cd1b416332d9d5b55f413e2bd74c2efce6107aef1ce3f497fa5a81b9abc83deb
Run Code Online (Sandbox Code Playgroud)
Cache not found for input keys: /opt/hostedtoolcache/Python/3.8.12/x64-03a86b868f006751e123da18168c989ab4c3c2713de4f5c87cf732ffbb6fb4ae-cd1b416332d9d5b55f413e2bd74c2efce6107aef1ce3f497fa5a81b9abc83deb
Run Code Online (Sandbox Code Playgroud)
eve*_*der 10
我的问题的解决方案非常愚蠢但有效,详细信息请参见此处。我为每个提交推送的暂存分支创建了一个特定的工作流程,该工作流程将更新缓存(如果需要)。这很有用,因为所有开发分支都是从暂存分支创建的,并且基础分支中可用的每个缓存也可供派生分支使用。所以最后,解决方案与原始帖子类似,但事件已更新。
来自 github 的文档:
工作流可以访问和恢复在当前分支、基本分支(包括分叉存储库的基本分支)或默认分支(通常是主分支)中创建的缓存。例如,在默认分支上创建的缓存可以从任何拉取请求访问。此外,如果分支 feature-b 具有基本分支 feature-a,则在 feature-b 上触发的工作流将有权访问在默认分支(主)、feature-a 和 feature-b 中创建的缓存。
name: update-cache
on:
push:
branches:
- "staging"
jobs:
# This workflow builds the Python package dependencies every time that the requirements
# files are modified and store it in cache to be accessible by all the CI in all other
# branches.
build-cache:
name: Build Cache
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
id: cache
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-ml.txt') }}
restore-keys:
${{ env.pythonLocation }}-
- if: steps.cache.outputs.cache-hit != 'true'
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7141 次 |
| 最近记录: |