CI/CD für Rust-Projekte: GitHub Actions von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum CI/CD für Rust-Projekte kritisch wichtig ist?

\n

Die Entwicklung mit Rust dreht sich nicht nur um Speichersicherheit und hohe Leistung, sondern auch um strenge Disziplin. Der Rust-Compiler fängt viele Fehler bereits während der Build-Phase ab, dennoch ersetzt dies nicht die Notwendigkeit von qualitativ hochwertigem Testen, Linting und der Überprüfung der Abhängigkeitskompatibilität. Hier kommt CI/CD (Continuous Integration / Continuous Deployment) ins Spiel.

\n

GitHub Actions ist ein integriertes Automatisierungssystem, das sich ideal für Rust-Projekte eignet. Es ermöglicht das automatische Ausführen von Tests, das Formatieren von Code, die Überprüfung auf Schwachstellen und sogar das Veröffentlichen von Crates in der Registry crates.io bei jedem Push in das Repository. In diesem Artikel werden wir die gesamte Pipeline durchgehen: vom grundlegenden cargo build bis zum Produktions-Deployment.

\n\n

1. Grundlagen: Einrichtung eines Basis-Workflows für Rust

\n

Jede CI/CD-Pipeline in GitHub Actions beginnt mit der Erstellung einer YAML-Datei im Verzeichnis .github/workflows/. Erstellen wir eine Datei ci.yml für die grundlegende Überprüfung eines Rust-Projekts.

\n\n

1.1. Erster Workflow: Build und Tests

\n

Beginnen wir mit einem minimalen Satz: Repository klonen, Rust installieren und Tests ausführen.

\n
name: Rust CI\n\non:\n  push:\n    branches: [ "main", "develop" ]\n  pull_request:\n    branches: [ "main" ]\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@stable\n    - name: Build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose
\n

Was passiert hier?

\n
    \n
  • actions/checkout@v4 — klont Ihren Code.
  • \n
  • dtolnay/rust-toolchain@stable — die offizielle Aktion zur Installation von Rust (unterstützt nightly, beta und stable).
  • \n
  • cargo build und cargo test — die Hauptbefehle zur Überprüfung des Projekts.
  • \n
\n

Dieser Workflow wird bei jedem Push in die Branches main und develop sowie bei der Erstellung eines Pull Requests ausgeführt.

\n\n

1.2. Caching von Abhängigkeiten zur Beschleunigung des Builds

\n

Rust-Projekte haben oft viele Abhängigkeiten. Um diese nicht jedes Mal herunterladen zu müssen, verwenden Sie Caching. Dies verkürzt die Build-Zeit von 5-10 Minuten auf 30-60 Sekunden.

\n
    - name: Cache Cargo registry\n      uses: actions/cache@v3\n      with:\n        path: |\n          ~/.cargo/registry\n          ~/.cargo/git\n          target/\n        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-cargo-
\n

Fügen Sie diesen Schritt vor dem Ausführen von cargo build hinzu. Der Hash der Datei Cargo.lock stellt sicher, dass der Cache nur bei Änderungen der Abhängigkeiten aktualisiert wird.

\n\n

2. Fortgeschrittene Code-Qualitätsprüfung

\n

Tests allein reichen nicht aus, um eine hohe Codequalität zu gewährleisten. Fügen wir Linting, Formatierung und Sicherheitsüberprüfungen hinzu.

\n\n

2.1. Formatierung (rustfmt) und Linting (clippy)

\n

Rust verfügt über integrierte Werkzeuge zur Einhaltung eines einheitlichen Codestils. Fügen wir diese in einem separaten Job hinzu:

\n
  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: dtolnay/rust-toolchain@stable\n      with:\n        components: clippy, rustfmt\n    - name: Check formatting\n      run: cargo fmt --check\n    - name: Run clippy\n      run: cargo clippy -- -D warnings
\n
    \n
  • cargo fmt --check — überprüft, ob der Code gemäß dem rustfmt-Standard formatiert ist.
  • \n
  • cargo clippy -- -D warnings — führt den Linter aus und wandelt Warnungen in Fehler um (Flag -D).
  • \n
\n

Dies hilft, "schmutzigen" Code im Repository zu vermeiden.

\n\n

2.2. Sicherheitsüberprüfung von Abhängigkeiten (car

Blogs

Buchempfehlungen