引言
Rust 作为一门安全高效的系统级编程语言,正受到越来越多开发者的青睐。然而,Rust 编译器为了保证内存安全和并发安全,需要进行大量检查,这导致了编译速度较慢的问题。对于使用 GitHub 托管项目的开发者来说,如何优化 GitHub Actions 中的 Rust 构建流程就显得尤为重要。本文将介绍一种利用缓存机制大幅提升 Rust 项目构建速度的方法,让你的 CI/CD 流程更加高效。
主要特性
利用 GitHub Actions 的缓存功能加速 Rust 项目构建 优化 cargo 工具的安装和使用 通过 Docker 构建缓存进一步提升性能 可重用的工作流配置,便于在多个项目中应用
快速上手
1. 设置 Rust 检查工作流
首先,我们来看一个优化过的 Rust 检查工作流配置:
name: Rust Check
on:
workflow_call:
inputs:
rust-version:
type: string
required: false
default: nightly
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 安装 Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ inputs.rust-version }}
override: true
components: rustfmt, clippy
- name: 设置 cargo 缓存
uses: actions/cache@v3
continue-on-error: false
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: 代码风格检查
run: |
cargo fmt --all -- --check
cargo clippy -- -D warnings
- name: 安装 cargo 检查工具
run: |
cargo install --locked cargo-deny || true
cargo install --locked cargo-outdated || true
cargo install --locked cargo-udeps || true
cargo install --locked cargo-audit || true
cargo install --locked cargo-pants || true
- name: 依赖检查
run: |
cargo deny check
cargo outdated --exit-code 1
cargo udeps
rm -rf ~/.cargo/advisory-db
cargo audit
cargo pants
- name: 运行测试
run: cargo test
这个工作流配置实现了以下功能:
检出代码并安装指定版本的 Rust 设置 cargo 缓存,加快后续构建速度 进行代码风格检查和静态分析 安装并运行各种 cargo 工具进行依赖检查 运行项目测试
2. 在项目中使用工作流
要在你的 Rust 项目中使用这个工作流,可以创建一个 .github/workflows/rust.yml
文件,内容如下:
name: Rust Pipeline
on:
push:
pull_request:
workflow_dispatch:
jobs:
check:
uses: your-username/your-repo/.github/workflows/rust-check.yaml@main
# 如果需要,可以在这里指定 Rust 版本
# with:
# rust-version: stable
3. 优化 Docker 构建
如果你的项目需要构建 Docker 镜像,可以使用以下工作流配置来加速构建过程:
name: Docker Build
on:
workflow_call:
inputs:
image:
type: string
required: true
secrets:
container-registry-username:
required: true
container-registry-password:
required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Docker Buildx
uses: docker/setup-buildx-action@v2.0.0
- name: 登录容器仓库
uses: docker/login-action@v2.0.0
with:
username: ${{ secrets.container-registry-username }}
password: ${{ secrets.container-registry-password }}
- name: 构建并推送镜像
uses: docker/build-push-action@v3.0.0
with:
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ inputs.image }}:latest
cache-from: type=registry,ref=${{ inputs.image }}:buildcache
cache-to: type=registry,ref=${{ inputs.image }}:buildcache,mode=max
这个工作流利用了 Docker 的构建缓存功能,可以显著减少重复构建的时间。
总结
通过合理配置 GitHub Actions 工作流,我们可以大幅提升 Rust 项目的构建速度。主要优化点包括:
利用 cargo 缓存加速依赖下载和编译 使用可重用的工作流配置,便于在多个项目中应用 优化 Docker 构建过程,利用镜像缓存提高效率
这些优化措施可以将构建时间从原来的数十分钟缩短到几分钟,极大地提高了开发效率。希望这篇文章能够帮助你优化自己的 Rust 项目 CI/CD 流程,如果你有任何问题或建议,欢迎在评论区留言讨论。
参考文章
How I speeded up my Rust builds on GitHub ~30 times:https://ectobit.com/blog/speed-up-github-actions-rust-pipelines GitHub Actions 文档:https://docs.github.com/cn/actions Rust 官方文档:https://www.rust-lang.org/zh-CN/learn
书籍推荐
各位 Rust 爱好者,今天为大家介绍一本《Programming Rust: Fast, Safe Systems Development》(第二版) 是由 Jim Blandy、Jason Orendorff 和 Leonora Tindall 合著的 Rust 编程指南。本书深入探讨了 Rust 语言在系统编程中的应用,着重介绍如何利用 Rust 的独特特性来平衡性能和安全性。书中涵盖了 Rust 的基础数据类型、所有权和借用概念、特征和泛型、并发编程、闭包、迭代器以及异步编程等核心内容。这本更新版基于 Rust 2021 版本,为系统程序员提供了全面而实用的 Rust 编程指导。