CI/CD für C++-Projekte: Vollständige Anleitung zur Einrichtung von GitHub Actions
In der modernen Softwareentwicklung ist die Automatisierung von Build-, Test- und Bereitstellungsprozessen nicht nur eine Annehmlichkeit, sondern eine Notwendigkeit geworden. Für C++-Projekte, die sich oft durch komplexe Build-Systeme und Abhängigkeiten auszeichnen, ist die Einführung von CI/CD (Continuous Integration / Continuous Deployment) besonders relevant. In diesem Artikel werden wir im Detail besprechen, wie man eine CI/CD-Pipeline für C++-Projekte mit GitHub Actions einrichtet – einem leistungsstarken und integrierten Automatisierungstool.
Was ist GitHub Actions und warum ist es für C++ geeignet?
GitHub Actions ist eine Plattform zur Automatisierung von Arbeitsabläufen (Workflows), mit der Sie CI/CD-Pipelines direkt in Ihrem Repository auf GitHub erstellen können. Für C++-Entwickler ist dies aus mehreren Gründen eine ideale Lösung:
- Kostenlose Build-Minuten für öffentliche Repositories.
- Unterstützung für Linux, macOS und Windows – Sie können plattformübergreifende Builds testen.
- Flexible Konfiguration über YAML-Dateien.
- Riesiges Ökosystem vorgefertigter Aktionen (actions) zur Installation von Compilern, Abhängigkeiten und Tools.
Das Hauptelement ist ein Workflow, der in der Datei .github/workflows/*.yml beschrieben wird. Jeder Workflow besteht aus einem oder mehreren Jobs (Aufgaben), die auf virtuellen Maschinen (Runnern) ausgeführt werden.
Einrichtung einer grundlegenden Pipeline: Build und Tests
Beginnen wir mit dem Einfachsten – wir erstellen einen Workflow, der Ihr C++-Projekt mit CMake erstellt und jedes Mal Tests ausführt, wenn Sie Änderungen an den Branch main pushen oder einen Pull Request erstellen.
Erstellen Sie die Datei .github/workflows/build.yml im Stammverzeichnis Ihres Repositories und fügen Sie den folgenden Code hinzu:
name: C++ CI Build
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libgtest-dev
- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build run: cmake --build build --config Release
- name: Run tests working-directory: ./build run: ctest --output-on-failureLassen Sie uns diesen Code Schritt für Schritt durchgehen:
- name – der Name des Workflows, der in der GitHub-Oberfläche angezeigt wird.
- on – die Trigger, bei denen der Workflow ausgeführt wird (push und pull_request in main).
- runs-on – das Betriebssystem des Runners (ubuntu-latest, windows-latest, macos-latest).
- actions/checkout – die Standardaktion, die Ihr Repository klont.
- Install dependencies – installiert CMake, den GCC-Compiler und die Google Test-Bibliothek für Unit-Tests.
- Configure, Build, Run tests – Standard-CMake-Befehle zum Erstellen und Ausführen von Tests.
Optimierung: Caching und Matrix-Builds
Die grundlegende Pipeline funktioniert, kann aber erheblich verbessert werden. Zwei Schlüsseltechniken sind Caching von Abhängigkeiten und Matrix-Builds.
Caching zur Beschleunigung des Builds
Jedes Mal, wenn der Workflow ausgeführt wird, lädt der Runner alle Abhängigkeiten erneut herunter. Das kostet Zeit. Verwenden Sie actions/cache, um den CMake-Cache und installierte Pakete zu speichern:
- name: Cache CMake build uses: actions/cache@v3 with: path: | build /usr/l