0Pricing
DevOps Bootcamp · 课时

缓存依赖项以提升速度

通过复用已生成的依赖项和构建输出实现缓存,大幅提升工作流执行速度

缓存依赖项以提升速度 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

使用缓存加速工作流程

您是否注意到工作流程每次都会重新下载相同的依赖项?这会拖慢运行速度!

GitHub 操作中的缓存可以存储并重复使用之前运行中的文件,从而显著加快后续工作流程的执行速度。

认识缓存操作

GitHub 提供了一个名为 actions/cache@v3 的特殊操作。此操作旨在保存和恢复文件,让您的工作流程运行得更快。

它非常智能:在尝试恢复缓存之前,会先检查缓存是否已存在;如果不存在,则会保存缓存。

缓存键和路径

actions/cache 的两个关键参数是 key 和 path:

  • key:用于标识缓存的唯一字符串。如果找到具有此键的缓存,就会将其恢复。
  • path:您希望缓存的文件路径或目录。它告诉操作要保存或恢复哪些内容。

键通常包含依赖项文件的哈希值,以确保依赖项发生变化时缓存会失效。

缓存 Node.js 依赖项

让我们为 Node.js 项目缓存 node_modules。我们将使用 hashFiles,根据 package-lock.json 创建一个动态键。

请尝试运行以下简单的工作流程代码片段:

name: Node.js CI with Cache

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Cache Node.js modules
      uses: actions/cache@v3
      with:
        path: node_modules
        key: npm-${{ hashFiles('package-lock.json') }}
        restore-keys: |
          npm-
    - name: Install dependencies
      run: npm ci
    - name: Run tests
      run: npm test

使用恢复键进行回退

如果您的精确 key 与任何缓存都不匹配,该怎么办?这时,restore-keys 就派上用场了!

restore-keys 提供一个回退键列表,用于搜索缓存。如果主键(例如 npm-${{ hashFiles(...) }})未命中,GitHub 操作会按顺序尝试使用 restore-keys 查找缓存。

在我们的示例中,npm- 会尝试查找所有以“npm-”开头的缓存;如果只有依赖项的小版本发生变化,这会非常有用。

缓存 Python 依赖项

缓存并不只适用于 Node.js!您可以将相同的原则应用于 Python 等其他语言。在这里,我们缓存 Python 的虚拟环境和 pip 缓存。

这里使用 hashFiles('requirements.txt') 生成键,而路径指向虚拟环境和 pip 的缓存目录。

name: Python CI with Cache

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.x'
    - name: Cache Python dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.cache/pip
          .venv
        key: pip-${{ hashFiles('requirements.txt') }}
        restore-keys: |
          pip-
    - name: Install dependencies
      run: |
        python -m venv .venv
        .venv/bin/pip install -r requirements.txt
    - name: Run tests
      run: .venv/bin/python -m unittest discover

缓存何时失效

缓存只有在足够新时才有用。如果依赖项发生变化,缓存也应随之变化!

如果您的主 key(例如 npm-${{ hashFiles('package-lock.json') }})发生变化,缓存会自动失效。如果更新了 package-lock.json,哈希值就会变化,并且会创建新的缓存。

您还可以手动更改键来强制重建缓存(例如,添加版本后缀,如 npm-v2-${{ hashFiles(...) }})。

缓存范围和限制

了解缓存的后台工作方式很有帮助:

  • 范围:缓存按存储库和分支分别设定范围。main 分支上的缓存不会用于功能分支,除非您明确配置 lookup-path。
  • 大小限制:每个缓存最大可达 10GB。
  • 保留期限:缓存会在最后一次访问后保留 7 天。旧的、未使用的缓存会自动移除。

智能缓存实践

要充分利用缓存:

  • 使用 hashFiles:始终将缓存键关联到依赖项清单文件(例如 package-lock.json、requirements.txt)。
  • 明确指定 path:只缓存必要的内容(例如 node_modules、~/.cache/pip)。
  • 使用 restore-keys:提供回退键,以提高缓存命中率。
  • 避免缓存易变数据:不要缓存经常变化的文件,或每次运行都很大且独有的文件(例如用于部署的构建产物)。

缓存键挑战

您有一个使用 Maven 的 Java 项目。其依赖项定义在 pom.xml 中,Maven 通常会将下载的 JAR 文件存储在 ~/.m2/repository 中。

哪种缓存配置最能确保 Maven 依赖项得到缓存,并在 pom.xml 发生变化时正确失效?

回顾:使用缓存提速

做得很好!您已经学会了如何在 GitHub 操作中实现缓存,从而显著加快持续集成/持续交付工作流程。

  • actions/cache 操作就是您的工具。
  • 使用 key 和 path 定义缓存的内容和方式。
  • hashFiles 创建动态键,实现智能失效。
  • restore-keys 提供有价值的回退键。

通过智能缓存依赖项,您可以节省构建时间和计算资源,让流水线运行得更加高效!

常见问题解答

「缓存依赖项以提升速度」课时是免费的吗?

是的 — 「缓存依赖项以提升速度」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「缓存依赖项以提升速度」这节课中我会学到什么?

通过复用已生成的依赖项和构建输出实现缓存,大幅提升工作流执行速度 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「缓存依赖项以提升速度」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 适用于多环境的矩阵构建
  2. 缓存依赖项以提升速度
  3. 可复用工作流与操作
  4. 条件执行与任务依赖
← 返回 DevOps Bootcamp