linux

Rust项目在Linux如何持续集成

小樊
34
2025-11-28 14:32:40
栏目: 编程语言

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'
      }
    }
  }
}

四、关键实践与优化

五、常见陷阱与排查

0
看了该问题的人还看了