Rust 持续集成环境配置指南
一、通用流水线设计
二、GitHub Actions 示例
name: Rust CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Check formatting
run: cargo fmt -- --check
- name: Lint with Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Run tests
run: cargo test --all-targets --all-features --verbose
- name: Build release
run: cargo build --release
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: app-release-${{ github.sha }}
path: target/release/your-app
# 可选:构建并推送 Docker 镜像
docker-build-push:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.sha }},${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
platforms: linux/amd64,linux/arm64
三、GitLab CI 示例
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/
policy: pull-push
stages:
- setup
- lint
- test
- build
setup_rust:
stage: setup
script:
- rustup component add clippy rustfmt
- rustup target add wasm32-unknown-unknown
lint_fmt:
stage: lint
script:
- cargo fmt -- --check
- cargo clippy --all-targets --all-features -- -D warnings
test_suite:
stage: test
script:
- cargo test --all-targets --all-features --verbose
build_release:
stage: build
script:
- cargo build --release
artifacts:
paths:
- target/release/
四、Jenkins 与通用优化
pipeline {
agent any
environment {
RUSTUP_HOME = '/opt/rustup'
CARGO_HOME = '/opt/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
. "$CARGO_HOME/env"
rustup toolchain install stable
rustup default stable
rustup component add clippy rustfmt
'''
}
}
stage('Lint') {
steps { sh 'cargo fmt -- --check && cargo clippy -- -D warnings' }
}
stage('Test') {
steps { sh 'cargo test --all-targets --all-features' }
}
stage('Build') {
steps { sh 'cargo build --release' }
}
}
}