优化 CI/CD 工作流程时间直接影响开发人员的工作效率并降低计算费用。本文向您展示如何在 GitHub Actions 中集成依赖项缓存,帮助您缩短编译和包设置时间。
我们提供适用于 Node.js、Python 和 Rust 的 YAML 工作流程模板,以及确保最佳缓存命中的最佳实践。
1. CI/CD中为什么要缓存依赖关系?
当 CI 代理在没有缓存的情况下启动时,它会启动一个干净的容器并从包注册表中获取每个依赖项。这带来了几个缺点:
- 低效的开发循环:开发人员在测试代码之前浪费宝贵的时间等待标准库安装。
- 网络风险:如果 npm、PyPI 或 crates.io 发生轻微停机,则您的构建会因外部网络问题而失败。
- 执行成本:在私有存储库上,GitHub 按每活跃分钟向您收费。更快的构建直接降低了运营成本。
缓存允许管道在执行过程中重用下载的资源,使后续运行的执行速度提高 80%。
2. 主要语言的 YAML 模板
2026 年,GitHub 的默认语言设置操作包括内置缓存支持,使配置变得简单。
1)Node.js(npm / pnpm / 纱线)
配置 actions/setup-node 下的 cache 属性:
name: Node.js CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm' # Supports npm, yarn, or pnpm
- name: Install Packages
run: npm ci
- name: Run Tests
run: npm test
2)Python(点子/诗歌)
对于 Python 环境,使用 actions/setup-python 中的 cache 键启用缓存:
name: Python Test Runner
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip' # Supports pip, poetry, or pipenv
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Run Linter
run: flake8 .
3) 生锈(货物)
Rust 编译是出了名的慢。要缓存 Cargo 依赖项和中间构建工件(/target 目录),请使用社区标准 swatinem/rust-cache:
name: Rust CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust compiler
uses: actions/setup-rust@v1
- name: Configure Cargo Cache
uses: swatinem/rust-cache@v2
- name: Execute Tests
run: cargo test
3. 自定义缓存及故障排除
对于默认操作未处理的文件夹,请使用 actions/cache 手动定义它们:
- name: Cache Custom Files
uses: actions/cache@v4
with:
path: ~/.my-custom-cache
key: ${{ runner.os }}-custom-${{ hashFiles('**/lockfile.json') }}
restore-keys: |
${{ runner.os }}-custom-
key:缓存的唯一标识符。hashFiles函数创建锁定文件的哈希值(package-lock.json、Cargo.lock等)。当锁定文件更改时,旧的缓存将失效并构建新的缓存。restore-keys:如果未找到确切的缓存命中,则可以依靠的前缀键的有序列表。
防止缓存未命中
- 提交锁定文件:确保在 Git 中跟踪锁定文件。如果没有它们,哈希值就会波动,导致频繁的缓存未命中。
- 跟踪缓存大小:GitHub 将每个存储库的缓存存储限制为 10GB。一旦超过此限制,GitHub 会自动逐出较旧的缓存。从缓存路径中排除不必要的构建工件。
4.摘要
配置操作缓存是优化软件管道的最简单方法之一。实施这些更改可以每周为您的团队节省数小时的等待时间。立即验证您的 YAML 工作流程并集成缓存。

