CI/CD für Rust-Projekte: Einrichtung von GitHub Actions

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

Einführung: Warum CI/CD für Rust-Projekte wichtig ist



Die Entwicklung mit Rust dreht sich nicht nur um Speichersicherheit und hohe Leistung. In der modernen Welt erfordert jedes ernsthafte Projekt die Automatisierung von Build-, Test- und Bereitstellungsprozessen. CI/CD (Continuous Integration / Continuous Deployment) ermöglicht es Teams, Updates schneller zu veröffentlichen, das Risiko menschlicher Fehler zu reduzieren und die Stabilität der Codebasis zu gewährleisten.



GitHub Actions ist ein integriertes GitHub-Tool zur Automatisierung von Arbeitsabläufen. Es ist ideal für Rust-Projekte, da es vorgefertigte Actions zum Installieren des Compilers, zum Caching von Abhängigkeiten und zum Veröffentlichen von Crates auf crates.io bietet. In diesem Artikel werden wir besprechen, wie man eine vollständige CI/CD-Pipeline für eine Rust-Anwendung von Grund auf einrichtet.



1. Grundlagen von GitHub Actions für Rust



Bevor wir in den Code eintauchen, lassen Sie uns die grundlegende Struktur von GitHub Actions verstehen. Jeder Workflow wird durch eine YAML-Datei definiert, die im Verzeichnis .github/workflows/ liegt. Ein Workflow besteht aus einem oder mehreren Jobs (Aufgaben), die sequenziell oder parallel auf virtuellen Maschinen (Runnern) ausgeführt werden.



Für Rust-Projekte umfasst ein minimaler Workflow die folgenden Schritte:



  • Checkout — Abrufen der neuesten Version des Codes aus dem Repository.
  • Rust installieren — über die Action actions-rs/toolchain oder die offizielle dtolnay/rust-toolchain.
  • Abhängigkeiten cachen — Beschleunigung des Builds durch Speichern von target/ und ~/.cargo/.
  • Build und Tests — Ausführen von cargo build und cargo test.


Beispiel für einen Basis-Workflow (Datei .github/workflows/ci.yml):



name: Rust CI

on: push: branches: [ main ] pull_request: branches: [ main ]

env: CARGO_TERM_COLOR: always

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v3 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - name: Cache dependencies uses: actions/cache@v3 with: path: | ~/.cargo/ target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose - name: Lint with clippy run: cargo clippy -- -D warnings - name: Check formatting run: cargo fmt --check


Dieser Workflow wird bei jedem Push in den Branch main und bei der Erstellung eines Pull Requests ausgelöst. Er überprüft, ob der Code kompiliert, die Tests bestanden werden, keine Linter-Fehler vorliegen und der Formatierungsstil eingehalten wird.



2. Fortgeschrittene Strategien: Matrix-Build und Caching



Rust ist eine plattformübergreifende Sprache, und oft ist es erforderlich, den Build auf mehreren Betriebssystemen oder Architekturen zu überprüfen. Dafür wird der Matrix-Build verwendet.



Fügen wir unserem Workflow Unterstützung für Windows und macOS hinzu:



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]        rust: [stable, beta]        runs-on: ${{ matrix.os }}        steps:    - uses: actions/checkout@v3        - name: Install Rust      uses: dtolnay/rust-toolchain@master      with:        toolchain: ${{ matrix.rust }}        components: clippy        - name: Cache      uses: actions/cache@v3      with:        path: |          ~/.cargo/registry/          ~/.cargo/git/          target/        key: ${{ matrix.os }}-cargo-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }}        - name: Build      run: cargo build --                

Blogs

Buchempfehlungen