Rust 项目的 CI/CD:从 A 到 Z 的 GitHub Actions 指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 CI/CD 对 Rust 项目至关重要?

\n

使用 Rust 开发不仅关乎内存安全和高性能,也关乎严格的纪律。Rust 编译器在构建阶段能捕获大量错误,但这并不能替代高质量测试、代码检查(linting)和依赖兼容性验证的需求。这时,CI/CD(持续集成 / 持续部署)就派上了用场。

\n

GitHub Actions 是一个内置的自动化系统,非常适合 Rust 项目。它允许你在每次推送到仓库时自动运行测试、格式化代码、检查漏洞,甚至将 crate 发布到 crates.io 注册表。在本文中,我们将介绍完整的流水线:从基础的 cargo build 到生产环境部署。

\n\n

1. 基础:为 Rust 配置基本工作流

\n

GitHub Actions 中的任何 CI/CD 流水线都始于在 .github/workflows/ 目录下创建一个 YAML 文件。让我们创建一个 ci.yml 文件,用于 Rust 项目的基本检查。

\n\n

1.1. 第一个工作流:构建和测试

\n

我们从最小集合开始:克隆仓库、安装 Rust 并运行测试。

\n
name: Rust CI\n\non:\n  push:\n    branches: [ "main", "develop" ]\n  pull_request:\n    branches: [ "main" ]\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@stable\n    - name: Build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose
\n

这里发生了什么?

\n
    \n
  • actions/checkout@v4 — 克隆你的代码。
  • \n
  • dtolnay/rust-toolchain@stable — 用于安装 Rust 的官方 action(支持 nightly、beta 和 stable)。
  • \n
  • cargo build 和 cargo test — 用于检查项目的主要命令。
  • \n
\n

此工作流将在每次推送到 main 和 develop 分支以及创建 Pull Request 时运行。

\n\n

1.2. 缓存依赖以加速构建

\n

Rust 项目通常有很多依赖。为了避免每次都下载它们,请使用缓存。这可以将构建时间从 5-10 分钟缩短到 30-60 秒。

\n
    - name: Cache Cargo registry\n      uses: actions/cache@v3\n      with:\n        path: |\n          ~/.cargo/registry\n          ~/.cargo/git\n          target/\n        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-cargo-
\n

在运行 cargo build 之前添加此步骤。来自 Cargo.lock 文件的哈希确保仅在依赖项更改时更新缓存。

\n\n

2. 高级代码质量检查

\n

仅靠测试不足以维持高代码质量。让我们添加代码检查(linting)、格式化(formatting)和安全检查。

\n\n

2.1. 格式化(rustfmt)和代码检查(clippy)

\n

Rust 拥有用于维护统一代码风格的内置工具。将它们添加到一个单独的 job 中:

\n
  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: dtolnay/rust-toolchain@stable\n      with:\n        components: clippy, rustfmt\n    - name: Check formatting\n      run: cargo fmt --check\n    - name: Run clippy\n      run: cargo clippy -- -D warnings
\n
    \n
  • cargo fmt --check — 检查代码是否按照 rustfmt 标准格式化。
  • \n
  • cargo clippy -- -D warnings — 运行 linter 并将警告转为错误(使用 -D 标志)。
  • \n
\n

这将有助于避免仓库中出现“脏”代码。

\n\n

2.2. 依赖项安全检查(car

博客

书籍推荐