Featured image of post 使用缓存加速 GitHub Actions CI/CD 工作流程Featured image of post 使用缓存加速 GitHub Actions CI/CD 工作流程

使用缓存加速 GitHub Actions CI/CD 工作流程

通过缓存 npm 模块、pip 包和 Cargo 构建目标来优化 GitHub Actions 构建步骤。

优化 CI/CD 工作流程时间直接影响开发人员的工作效率并降低计算费用。本文向您展示如何在 GitHub Actions 中集成依赖项缓存,帮助您缩短编译和包设置时间。

我们提供适用于 Node.js、Python 和 Rust 的 YAML 工作流程模板,以及确保最佳缓存命中的最佳实践。


1. CI/CD中为什么要缓存依赖关系?

当 CI 代理在没有缓存的情况下启动时,它会启动一个干净的容器并从包注册表中获取每个依赖项。这带来了几个缺点:

  1. 低效的开发循环:开发人员在测试代码之前浪费宝贵的时间等待标准库安装。
  2. 网络风险:如果 npm、PyPI 或 crates.io 发生轻微停机,则您的构建会因外部网络问题而失败。
  3. 执行成本:在私有存储库上,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.jsonCargo.lock 等)。当锁定文件更改时,旧的缓存将失效并构建新的缓存。
  • restore-keys:如果未找到确切的缓存命中,则可以依靠的前缀键的有序列表。

防止缓存未命中

  1. 提交锁定文件:确保在 Git 中跟踪锁定文件。如果没有它们,哈希值就会波动,导致频繁的缓存未命中。
  2. 跟踪缓存大小:GitHub 将每个存储库的缓存存储限制为 10GB。一旦超过此限制,GitHub 会自动逐出较旧的缓存。从缓存路径中排除不必要的构建工件。

4.摘要

配置操作缓存是优化软件管道的最简单方法之一。实施这些更改可以每周为您的团队节省数小时的等待时间。立即验证您的 YAML 工作流程并集成缓存。