Einleitung: Warum CI/CD für C++-Projekte?
Die Entwicklung mit C++ wird traditionell mit manuellem Build, Testausführung und sorgfältiger Versionskontrolle assoziiert. In der modernen Entwicklung, insbesondere bei der Teamarbeit, wird dieser Ansatz jedoch zum Engpass. CI/CD (Continuous Integration / Continuous Deployment) ist eine Praxis, die die Prozesse des Builds, Testens und Bereitstellens von Code automatisiert. Für C++-Projekte, bei denen Kompilierungs- oder Linkfehler nur auf bestimmten Plattformen auftreten können, ist CI/CD von entscheidender Bedeutung.
GitHub Actions ist ein leistungsstarkes und flexibles Tool, das in GitHub integriert ist und es ermöglicht, Pipelines direkt im Repository zu erstellen. In diesem Artikel werden wir durchgehen, wie man CI/CD für ein C++-Projekt von Grund auf mit GitHub Actions einrichtet. Sie erfahren, wie Sie den Build mit CMake automatisieren, Unit-Tests ausführen, die Codequalität überprüfen und sogar Releases veröffentlichen.
Am Ende des Artikels werden Sie in der Lage sein, selbstständig eine Pipeline einzurichten, die Stunden manueller Arbeit spart und die Zuverlässigkeit Ihres Projekts erhöht.
Hauptteil: Schritt-für-Schritt-Anleitung zu GitHub Actions für C++
1. Grundlagen von GitHub Actions: Workflow, Jobs und Steps
Bevor wir Code schreiben, lassen Sie uns die Terminologie klären. GitHub Actions basiert auf Workflows (Arbeitsabläufen), die in YAML-Dateien innerhalb des Verzeichnisses .github/workflows/ beschrieben werden. Jeder Workflow besteht aus einem oder mehreren Jobs (Aufgaben), die parallel oder sequentiell ausgeführt werden. Jeder Job besteht aus Steps (Schritten) – einzelnen Befehlen oder Aktionen.
Für ein C++-Projekt umfasst ein typischer Workflow:
- Build: Kompilierung des Projekts mit CMake und Make/Ninja.
- Test: Ausführung von Unit-Tests (z. B. mit Google Test oder Catch2).
- Lint: Überprüfung des Codes mit statischen Analysatoren (Clang-Tidy, Cppcheck).
- Deploy: Veröffentlichung von Artefakten oder Releases.
Der erste Workflow wird normalerweise für einen grundlegenden Build auf Ubuntu erstellt, aber C++ erfordert Tests auf verschiedenen Betriebssystemen (Linux, macOS, Windows). GitHub Actions unterstützt alle drei Plattformen.
2. Erstellen des ersten Workflows: Build und Test
Erstellen Sie die Datei .github/workflows/ci.yml im Stammverzeichnis Ihres Repositorys. Unten finden Sie ein Beispiel für ein Projekt, das CMake und Google Test verwendet.
name: C++ CI/CD Pipeline
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] build_type: [Debug, Release] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install dependencies (Linux) if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y cmake g++ ninja-build - name: Install dependencies (macOS) if: runner.os == 'macOS' run: brew install cmake ninja - name: Install dependencies (Windows) if: runner.os == 'Windows' run: choco install cmake ninja -y - name: Configure CMake run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} - name: Build run: cmake --build build --config ${{ matrix.build_type }} - name: Run tests working-directory: build run: ctest --output-on-failure -C ${{ matrix.build_type }}Dieser Workflow:
- Wird bei einem Push in
mainoderdevelopsowie bei der Erstellung eines Pull Requests ausgelöst. - Verwendet eine Matrix-Strategie für den Build auf drei Betriebssystemen und in zwei Konfigurationen (Debug/Release).
- Installiert Abhängigkeiten (CMake, Ninja) in Abhängigkeit vom Betriebssystem.