linux

Rust如何配置持续集成环境

小樊
37
2025-12-16 07:41:26
栏目: 编程语言

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

0
看了该问题的人还看了