- Es una configuración simple de CI que agrega un hook
post-receivea un repositorio Git bare en un servidor personal para automatizar pruebas, builds y movimiento de archivos - En comparación con las CI existentes, con configuraciones YAML complejas, ejecución lenta y self-hosting difícil, no se necesitaba aislamiento completo del build ni gestión de secretos
- Si las tareas se ejecutan directamente desde el hook, cuando fallan el push se rechaza o la finalización se demora, así que se procesan en segundo plano con la cola de tareas mínima
nq - El hook solo llama a
nqy los logs se consultan conssh server nqtail -a, lo que permite operarlo de forma rápida y simple - Según sea necesario, se puede aislar el build con landdown·Podman y gestionar secretos con sops, o ampliar el flujo de desarrollo con parches de Git por email,
git-shellygit http-backend
Configuración del hook post-receive y nq
- En un servidor personal, se crea el repositorio con
ssh server git init --bare repoy se clona congit clone server:repo - En el directorio hooks del repositorio bare, se coloca un
hook post-receiveen forma de script de shell para iniciar la CI cada vez que se hace push - Ejecutar las tareas directamente desde el hook genera dos problemas
- Si el script falla, el push se rechaza
- Si la ejecución del script es lenta, también se demora la finalización del push
- Desde el hook se llama a la cola de tareas mínima
nqpara agregar las tareas a una cola en segundo plano- Los logs se consultan con
ssh server nqtail -a - El proceso de configuración puede verse en un tutorial breve
- Los logs se consultan con
Aislamiento y ampliación del flujo de desarrollo
- Para ejecutar builds en un sandbox, se puede usar landdown
- Se puede aislar el build del entorno del host con Podman o gestionar secretos con sops
- Para el desarrollo estilo bazaar, conviene una configuración que reciba parches de Git por email
- El desarrollo estilo cathedral puede configurarse con
git-shellogit http-backend
1 comentarios
Opiniones en Lobste.rs
CI tiene al menos dos problemas
El problema fácil es ejecutar
make testcuando cambia el código, y el difícil es ejecutarmake testen Linux, Windows y MacComo la experiencia de desarrollo y las funciones de depuración de los motores existentes siempre quedan en segundo plano, estoy creando un sistema de CI en https://ci.pico.sh. Tampoco me gustan los DSL, y los YAML encadenados jerárquicamente se sienten como si te fueran drenando lentamente la vida
Una vez construí algo así sobre gitolite y lo pasé a Temporal para controlar el proceso de build sin limitaciones
Ante una falla de ejecución también se puede rechazar el push, pero normalmente prefiero dejar pasar el hook y manejar la falla por separado; la configuración también fue simple y divertida
Otro CI mínimo centrado en ejecutar scripts de shell es laminar CI, que también ofrece una UI web
Hace mucho, en un entorno corporativo exclusivo de Windows, usamos una Mac mini como servidor de CI local para todo el equipo y construíamos apps de iOS; fue uno de mis primeros intentos de aprovechar Git
Lo encontré en https://mccd.space/git/; parece que usa un fork de stagit
Hasta hace unos meses mantenía Forgejo y Woodpecker, pero eliminé todo porque la mayoría de las funciones no me hacían falta y estaba buscando una configuración más liviana parecida a esta. Como mi siguiente pendiente era CI, llegó en buen momento, y estoy considerando si espejar en SourceHut una pequeña biblioteca que publicaré pronto
Los repositorios se publican en la web en modo solo lectura con git-daemon, y dejé documentada toda la configuración aquí
Con este artículo conocí
nqpor primera vez, pero probablemente usaríasystemd-runComo uso Nix en casi todos mis runners, si expongo el resultado de
nix flake checkcomo métricas y logs OTLP, creo que podría resolver los requisitos de CI con el sistema de monitoreoMe gusta una configuración de plataforma de desarrollo self-hosted tan simple como esta
Para CI se puede configurar y usar fácilmente bubblewrap, un sistema de contenedores ligero y simple. Sin embargo, si se usa
nq, parece imposible rechazar el push cuando falla CI; me da curiosidad cómo lo manejanSi se necesita más aislamiento, se pueden agregar Podman, Docker o bubblewrap. No rechazo los pushes cuando falla CI por la misma razón por la que no pongo hooks pre-commit que ejecuten tests: a veces hay que commitear o pushear trabajo roto, y el push puede volverse muy lento. Si se necesita rechazarlo, se puede ejecutar CI de forma síncrona sin
nqy bloquear el push cuando el código de salida no sea 0O bien, las ramas que no sean main pueden ejecutarse con
nqy solo la rama main de forma síncronaParece que el enlace de
landdownestá roto