CI/CD para proyectos C++: Configuración de GitHub Actions

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

CI/CD para proyectos C++: Guía completa para configurar GitHub Actions



En el desarrollo de software moderno, la automatización de los procesos de compilación, prueba e implementación se ha convertido no solo en una conveniencia, sino en una necesidad. Para proyectos C++, que a menudo se caracterizan por sistemas de compilación complejos y dependencias, la implementación de CI/CD (Integración Continua / Despliegue Continuo) es especialmente relevante. En este artículo, analizaremos en detalle cómo configurar un pipeline de CI/CD para proyectos C++ utilizando GitHub Actions, una herramienta de automatización potente e integrada.



¿Qué es GitHub Actions y por qué es adecuado para C++?



GitHub Actions es una plataforma para automatizar flujos de trabajo (workflows) que le permite crear pipelines de CI/CD directamente en su repositorio de GitHub. Para los desarrolladores de C++, esta es una solución ideal por varias razones:



  • Minutos de compilación gratuitos para repositorios públicos.
  • Soporte para Linux, macOS y Windows — puede probar la compilación multiplataforma.
  • Configuración flexible a través de archivos YAML.
  • Enorme ecosistema de acciones listas (actions) para instalar compiladores, dependencias y herramientas.


El elemento principal es un workflow, que se describe en el archivo .github/workflows/*.yml. Cada workflow consta de uno o varios jobs (tareas) que se ejecutan en máquinas virtuales (runners).



Configuración de un pipeline básico: compilación y pruebas



Empecemos con lo más simple: crearemos un workflow que compile su proyecto C++ con CMake y ejecute pruebas cada vez que envíe cambios a la rama main o cree un Pull Request.



Cree un archivo .github/workflows/build.yml en la raíz de su repositorio y agregue el siguiente código:



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-failure


Analicemos este código paso a paso:

  • name — nombre del workflow que se mostrará en la interfaz de GitHub.
  • on — disparadores que inician el workflow (push y pull_request en main).
  • runs-on — sistema operativo del runner (ubuntu-latest, windows-latest, macos-latest).
  • actions/checkout — acción estándar que clona su repositorio.
  • Install dependencies — instalamos CMake, el compilador GCC y la biblioteca Google Test para pruebas unitarias.
  • Configure, Build, Run tests — comandos estándar de CMake para compilar y ejecutar pruebas.


Optimización: almacenamiento en caché y compilación matricial



El pipeline básico funciona, pero se puede mejorar significativamente. Dos técnicas clave son el almacenamiento en caché de dependencias y la compilación matricial.



Almacenamiento en caché para acelerar la compilación

Cada vez que se ejecuta el workflow, el runner descarga todas las dependencias de nuevo. Esto lleva tiempo. Use actions/cache para guardar en caché la compilación de CMake y los paquetes instalados:



    - name: Cache CMake build      uses: actions/cache@v3      with:        path: |          build          /usr/l                

Blogs

Book Recommendations