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 entscheidend ist



Rust ist eine Systemprogrammiersprache, die für ihre Leistung und Speichersicherheit bekannt ist. Selbst der zuverlässigste Code erfordert jedoch ständige Überprüfung. Manuelles Testen und Bauen kostet Zeit und ist fehleranfällig. CI/CD (Continuous Integration/Continuous Deployment) automatisiert diese Prozesse und stellt sicher, dass jede Codeänderung vor dem Zusammenführen in den Hauptzweig vom Compiler, Tests und Linter geprüft wird.



GitHub Actions ist eine integrierte Plattform zur Automatisierung von Arbeitsabläufen in GitHub. Sie ist ideal für Rust-Projekte aufgrund ihrer Flexibilität, des kostenlosen Minutenlimits für öffentliche Repositories und des riesigen Ökosystems vorgefertigter Aktionen. In diesem Artikel werden wir den gesamten Zyklus der CI/CD-Einrichtung für Rust durchgehen: vom grundlegenden Build bis zur Optimierung durch Caching und Deployment.



1. Grundlagen: Erster Workflow für Build und Tests



Beginnen wir mit der Erstellung eines minimalen Arbeitsablaufs. Erstellen Sie im Stammverzeichnis Ihres Repositorys den Ordner .github/workflows und die Datei ci.yml.



Basisdatei 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@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Build run: cargo build --verbose - name: Run tests run: cargo test --verbose


Erklärung der Schlüsselelemente:

  • on: Auslöser — Start bei Push in main und bei Erstellung eines Pull Request.
  • env: Die Variable CARGO_TERM_COLOR aktiviert die farbige Log-Ausgabe.
  • actions/checkout: Standardaktion zum Klonen des Repositorys.
  • dtolnay/rust-toolchain: Die beliebteste Aktion zur Installation von Rust. Verwenden Sie stable, nightly oder eine bestimmte Version.


Dieser Workflow ist bereits nützlich: Er stellt sicher, dass der Code kompiliert und alle Tests bestanden werden. Für ein reales Projekt reicht dies jedoch nicht aus.



2. Optimierung: Caching von Abhängigkeiten und plattformübergreifender Build



Jeder CI-Start lädt alle Abhängigkeiten erneut herunter. Bei Rust-Projekten mit vielen Crates kann dies Minuten dauern. Die Lösung ist das Caching der Ordner ~/.cargo und target.



Caching hinzufügen



jobs:  build:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable    - name: Cache dependencies      uses: actions/cache@v3      with:        path: |          ~/.cargo/bin/          ~/.cargo/registry/index/          ~/.cargo/registry/cache/          target/        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}    - name: Build      run: cargo build --verbose    - name: Run tests      run: cargo test --verbose


Wichtige Punkte:

  • hashFiles('**/Cargo.lock'): Der Cache wird nur ungültig, wenn sich Cargo.lock ändert.
  • path: Wir cachen Binärdateien, das Registry-Index und den target-Ordner.
  • Wiederherstellung: Bei Schlüsselübereinstimmung wird der Cache wiederhergestellt und cargo überspringt das Herunterladen.


Plattformübergreifender Build



Rust unterstützt viele Plattformen. Um sicherzustellen, dass Ihr Code überall funktioniert, verwenden Sie eine Build-Matrix:



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]    runs-on: ${{ matrix.os }}    steps:    - uses: actions/checkout@v4    - name: Install Rust      uses: dtolnay/rust-toolchain@stable                

Blogs

Buchempfehlungen