CI/CD für C++-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

Einführung in CI/CD für C++ mit GitHub Actions

\n

Moderne C++-Entwicklung ist ohne Automatisierung von Build- und Testprozessen undenkbar. CI/CD (Continuous Integration / Continuous Deployment) ermöglicht Teams, Fehler schnell zu erkennen, Binärdateien automatisch zu erstellen und Anwendungen bereitzustellen. GitHub Actions ist ein leistungsstarkes, in GitHub integriertes Tool, das sich ideal für C++-Projekte eignet. In diesem Artikel werden wir erläutern, wie man eine vollständige CI/CD-Pipeline für C++ einrichtet: von der Kompilierung mit CMake bis zum Deployment fertiger Artefakte.

\n

Wir werden reale Codebeispiele, typische Fehler und bewährte Verfahren betrachten. Nach der Lektüre können Sie CI/CD eigenständig in Ihrem C++-Projekt implementieren.

\n\n

Grundlagen von GitHub Actions für C++

\n

Struktur der Workflow-Datei

\n

Ein Workflow in GitHub Actions wird durch eine YAML-Datei im Verzeichnis .github/workflows/ definiert. Betrachten wir ein grundlegendes Beispiel für ein C++-Projekt:

\n
name: C++ CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y cmake g++ libboost-all-dev\n\n    - name: Configure with CMake\n      run: mkdir build && cd build && cmake ..\n\n    - name: Build project\n      run: cd build && make -j$(nproc)\n\n    - name: Run tests\n      run: cd build && ctest --output-on-failure
\n

Dieser Workflow wird bei Pushs in main und develop sowie bei der Erstellung von Pull Requests ausgelöst. Er installiert Abhängigkeiten, konfiguriert den Build über CMake, kompiliert das Projekt und führt Tests aus.

\n\n

Auswahl des Betriebssystems und Compilers

\n

GitHub Actions unterstützt Linux (ubuntu), macOS und Windows. Für plattformübergreifende Projekte kann eine Build-Matrix verwendet werden:

\n
jobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n        compiler: [g++, clang++]\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - name: Set compiler\n      run: |\n        if [ "${{ matrix.os }}" == "windows-latest" ]; then\n          echo "CXX=cl.exe" >> $GITHUB_ENV\n        else\n          echo "CXX=${{ matrix.compiler }}" >> $GITHUB_ENV\n        fi\n      shell: bash
\n

Dies ermöglicht die Überprüfung der Code-Kompatibilität mit verschiedenen Compilern und Betriebssystemen.

\n\n

Erweiterte Konfiguration: Testen, Caching und Artefakte

\n

Caching von Abhängigkeiten

\n

Jeder Build in GitHub Actions beginnt mit einer sauberen Umgebung. Um den Prozess zu beschleunigen, cachen Sie heruntergeladene Pakete und Bibliotheken:

\n
- name: Cache CMake build directory\n  uses: actions/cache@v3\n  with:\n    path: build\n    key: ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}\n    restore-keys: |\n      ${{ runner.os }}-cmake-\n\n- name: Configure CMake\n  run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
\n

Der Cache wird wiederhergestellt, wenn sich die CMakeLists.txt-Dateien nicht geändert haben, was bei wiederholten Builds Zeit spart.

\n\n

Ausführen von Unit-Tests mit Google Test

\n

Für C++ wird häufig Google Test verwendet. Fügen wir eine Testphase mit Generierung eines Berichts im JUnit-Format hinzu:

\n
- name: Build and run tests\n  run: |\n    cmake --build build --target all_tests\n    cd build && ctest --output-junit test-results.xml\n\n- name: Upload test results\n  if: always()\n  uses: actions/upload-artifact@v4\n  with:\n    name: test-results-${{ runner.os }}\n    path: build/test-results.xml
\n

Das Flag if: always() stellt sicher, dass der Bericht auch bei Testfehlern hochgeladen wird.

\n\n

Erstellung und Veröffentlichung von Artefakten

\n

Nach einem erfolgreichen Build können Binärdateien gespeichert werden:

\n
- name: Build release binary\n  run: cmake --build build --config Release\n\n- name: Upload build artifacts\n  uses: ac                

Blogs

Buchempfehlungen