Rust 项目在 Linux 的持续集成实践
一、方案总览与工具选择
二、GitHub Actions 示例
name: Rust CI on Linux
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
jobs:
ci-linux:
name: Linux (${{ matrix.toolchain }}, ${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
matrix:
toolchain: [stable, beta]
target: [x86_64-unknown-linux-gnu]
include:
- toolchain: nightly
target: x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v4
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install Rust toolchain
run: |
rustup toolchain install ${{ matrix.toolchain }} --profile minimal
rustup default ${{ matrix.toolchain }}
rustup target add --toolchain ${{ matrix.toolchain }} ${{ matrix.target }}
- name: Build
run: cargo build --verbose --target ${{ matrix.target }}
- name: Test
run: cargo test --verbose --target ${{ matrix.target }}
- name: rustfmt
run: cargo fmt --all -- --check
- name: Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
三、GitLab CI 与 Jenkins 模板
image: rust:latest
variables:
CARGO_HOME: $CI_PROJECT_DIR/.cargo
RUSTUP_HOME: $CI_PROJECT_DIR/.rustup
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .cargo/registry
- .cargo/git
- target/
stages:
- setup
- test
- build
setup_rust:
stage: setup
script:
- rustup component add clippy rustfmt
- rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu
test_suite:
stage: test
script:
- cargo test --verbose
- cargo clippy -- -D warnings
- cargo fmt -- --check
build_release:
stage: build
script:
- cargo build --release
artifacts:
paths:
- target/release/
pipeline {
agent any
environment {
RUSTUP_HOME = '/usr/local/rustup'
CARGO_HOME = '/usr/local/cargo'
PATH = "$CARGO_HOME/bin:$PATH"
}
stages {
stage('Setup Rust') {
steps {
sh 'curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y'
sh 'source $HOME/.cargo/env'
sh 'rustup toolchain install stable'
sh 'rustup default stable'
sh 'rustup component add clippy rustfmt'
}
}
stage('Test') {
steps {
sh 'cargo test --verbose'
sh 'cargo clippy -- -D warnings'
sh 'cargo fmt -- --check'
}
}
stage('Build') {
steps {
sh 'cargo build --release'
}
}
}
}
四、关键实践与优化
五、常见陷阱与排查