NBuild
nbuild es un sistema de integración continua orientado a proyectos C/C++ basados en CMake. A diferencia de otras soluciones, esta no es de propósito general. nbuild se enfoca en compilar y probar proyectos C/C++ a través de una red heterogénea de máquinas, nada más. Podemos verlo como un macro-compilador o un orquestador de compiladores. Se utiliza diariamente en el desarrollo de NAppGUI-SDK, cuyos informes están disponibles a través de la pestaña BUILDS en la web del proyecto. Corre como una utilidad por línea de comandos:
|
nbuild -n network.json -w workflow.json |
network.json
: Red de nodos.workflow.json
: Flujos de trabajo.
1. Motivación y características
Las primeras líneas de nbuild se escribieron en el año 2015, durante el desarrollo de NAppGUI-SDK, como una pequeña utilidad para lanzar comandos de compilación remotos mediante ssh. Con el tiempo ha ido evolucionando tomando características propias de sistemas CI/CD convencionales. Hay diversos motivos por lo que NAppGUI no adoptó ninguna de estas CI/CD pero pueden resumirse en: Complejidad del despliegue, evitar scripting, evitar el cloud y garantizar el funcionamiento de por vida en plataformas legacy. Todo esto unido a la facilidad y potencia que brinda el tandem C+SSH para implementar cualquier necesidad actual o futura, ha sido suficiente motivación para ir mejorando esta herramienta a lo largo de los años. Las principales características de nbuild pueden resumirse en:
- Escrito en ANSI-C90, utilizando el propio NAppGUI-SDK.
- Compilación, prueba y empaquetado de proyectos en C/C++ basados en CMake.
- Orientado a proyectos Open-Source, donde se distribuye el código fuente.
- Mínima configuración en los nodos (runners) donde únicamente es necesario instalar SSH, CMake y los compiladores.
- No requiere soporte cloud ni conexión a Internet. Funciona en una red de área local.
- Ejecuta un flujo fijo, por lo no hay que programar scripts. Tan solo indicar, dentro de
workflow.json
, que código queremos compilar y para que plataformas. - No hay paneles de control. Corre como una utilidad por línea de comandos.
- Cada proyecto puede definir su propia red de nodos.
- Funciona con nodos "legacy" como Ubuntu12, WindowsXP o MacOSX Snow Leopard.
- Un flujo de trabajo relativamente grande puede dividirse en varias etapas de diferente prioridad, obteniendo resultados parciales lo antes posible.
- Multihilo. Controla diferentes nodos en paralelo.
- Scheduler. Empareja trabajos con los nodos disponibles.
- No bloqueante. En ningún momento la ejecución de nbuild interfiere o bloquea nuevos cambios en el repositorio.
- nboot. Capacidad de encender/apagar máquinas bajo demanda, en el momento que se necesiten.
- ndoc. Generación de documentación asociada al proyecto (HTML5/LaTeX/PDF).
- nreport. Genera reportes web con el resultado de cada compilación.
2. Licencia
nbuild es un proyecto Open Source y se publica bajo licencia MIT. El código fuente está disponible en GitHub.