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

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



Moderne C++-Entwicklung erfordert nicht nur das Schreiben von qualitativ hochwertigem Code, sondern auch die Einrichtung von Prozessen für dessen Build, Test und Deployment. CI/CD (Continuous Integration / Continuous Deployment) ist eine Praxis, die es ermöglicht, diese Prozesse zu automatisieren und die Zeit zwischen dem Schreiben von Code und seiner Auslieferung an die Benutzer zu verkürzen. In diesem Artikel betrachten wir, wie man CI/CD für C++-Projekte mit GitHub Actions einrichtet – einem leistungsstarken und kostenlosen Tool, das in GitHub integriert ist.



GitHub Actions ermöglicht es, automatische Arbeitsabläufe (workflows) zu erstellen, die bei bestimmten Ereignissen ausgelöst werden: Push in das Repository, Erstellung eines Pull Request, Release und andere. Für C++-Projekte ist dies besonders nützlich, da es garantiert, dass der Code auf verschiedenen Plattformen gebaut wird und keine Regressionen enthält.



Grundlagen von GitHub Actions für C++



GitHub Actions verwendet YAML-Dateien zur Beschreibung von Workflows. Jeder Workflow besteht aus einem oder mehreren Jobs, die auf virtuellen Maschinen (runners) ausgeführt werden. Für C++-Projekte werden in der Regel Ubuntu-, Windows- und macOS-Runner verwendet. Betrachten wir die grundlegende Struktur einer Workflow-Datei.



name: C++ CI

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

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4

- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libboost-all-dev

- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release

- name: Build run: cmake --build build --config Release

- name: Test run: cd build && ctest --output-on-failure


Dieser Workflow wird bei einem Push in die Branches main und develop sowie bei der Erstellung eines Pull Request in main ausgelöst. Er installiert Abhängigkeiten (CMake, g++, Boost), konfiguriert das Projekt, baut es und führt die Tests aus.



Plattformübergreifender Build von C++-Projekten



Einer der Hauptvorteile von CI/CD für C++ ist die Möglichkeit, den Build automatisch auf mehreren Plattformen zu überprüfen. Dies ist entscheidend, da sich C++-Code auf verschiedenen Betriebssystemen und mit verschiedenen Compilern unterschiedlich verhalten kann. GitHub Actions ermöglicht es, eine Build-Matrix einfach zu organisieren.



jobs:  build:    strategy:      matrix:        os: [ubuntu-latest, windows-latest, macos-latest]        compiler: [g++, clang++]        include:          - os: ubuntu-latest            compiler: g++            cmake_flags: -DCMAKE_CXX_COMPILER=g++-11          - os: ubuntu-latest            compiler: clang++            cmake_flags: -DCMAKE_CXX_COMPILER=clang++-14          - os: windows-latest            compiler: msvc            cmake_flags: -DCMAKE_CXX_COMPILER=cl          - os: macos-latest            compiler: clang++            cmake_flags: -DCMAKE_CXX_COMPILER=clang++

runs-on: ${{ matrix.os }}

steps: - uses: actions/checkout@v4

- name: Install dependencies (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y cmake g++-11 clang-14 libboost-all-dev

- name: Install dependencies (macOS) if: matrix.os == 'macos-latest' run: | brew update brew install cmake boost

- name: Install dependencies (Windows) if: matrix.os == 'windows-latest' run: | choco install cmake boost-msvc-14.3

- name: Configure CMake run: cmake -B build ${{ matrix.cmake_flags }} -DCMAKE_BUILD_TYPE=Release

- name: Build run: cmake --build build --config Release

- name: Test run: | if [ "${{ runner.os }}" == "Windows" ]; then cd build && ctest -C Release --output-on-failure else cd build && ctest --output-on-failure fi


In diesem Beispiel

Blogs

Buchempfehlungen