CI/CD para proyectos C++: GitHub Actions de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a CI/CD para C++ con GitHub Actions

\n

El desarrollo moderno en C++ es impensable sin la automatización de los procesos de compilación y prueba. CI/CD (Integración Continua / Despliegue Continuo) permite a los equipos detectar errores rápidamente, compilar archivos binarios automáticamente e implementar aplicaciones. GitHub Actions es una herramienta potente, integrada en GitHub, que es ideal para proyectos C++. En este artículo, analizaremos cómo configurar un pipeline completo de CI/CD para C++: desde la compilación con CMake hasta la implementación de artefactos listos.

\n

Veremos ejemplos de código reales, errores típicos y mejores prácticas. Después de leerlo, podrá implementar CI/CD en su proyecto C++ de forma independiente.

\n\n

Fundamentos de GitHub Actions para C++

\n

Estructura del archivo de workflow

\n

Un workflow en GitHub Actions se define mediante un archivo YAML en el directorio .github/workflows/. Veamos un ejemplo básico para un proyecto C++:

\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

Este workflow se ejecuta al hacer push a main y develop, así como al crear un pull request. Instala las dependencias, configura la compilación con CMake, compila el proyecto y ejecuta las pruebas.

\n\n

Selección del sistema operativo y compilador

\n

GitHub Actions admite Linux (ubuntu), macOS y Windows. Para proyectos multiplataforma, se puede utilizar una matriz de compilaciones:

\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

Esto permite verificar la compatibilidad del código con diferentes compiladores y sistemas operativos.

\n\n

Configuración avanzada: pruebas, almacenamiento en caché y artefactos

\n

Almacenamiento en caché de dependencias

\n

Cada compilación en GitHub Actions comienza con un entorno limpio. Para acelerar el proceso, almacene en caché los paquetes y bibliotecas descargados:

\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

La caché se restaura si los archivos CMakeLists.txt no han cambiado, lo que ahorra tiempo en compilaciones repetidas.

\n\n

Ejecución de pruebas unitarias con Google Test

\n

Para C++ se usa a menudo Google Test. Agreguemos una etapa de prueba con generación de informe en formato JUnit:

\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

La bandera if: always() garantiza la carga del informe incluso si fallan las pruebas.

\n\n

Creación y publicación de artefactos

\n

Después de una compilación exitosa, se pueden guardar los archivos binarios:

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

Blogs

Book Recommendations