En una empresa de desarrollo gestionábamos despliegues con Jenkins para más de 100 clientes. El problema no fue montar Jenkins. Eso fue lo fácil. El problema empezó cuando cada cliente comenzó a tener pequeñas diferencias.
Aparecieron Jenkinsfiles duplicados con variaciones mínimas, lógica repetida, parámetros por cliente metidos directamente en pipelines y una mezcla de jobs freestyle antiguos con pipelines declarativos.
Todo empezó a degradarse: cambios comunes que no aplicaban a todos, uso inconsistente de credenciales, jobs que dependían de agentes concretos y pérdida de trazabilidad sobre qué versión estaba desplegada en cada cliente.
La salida no fue cambiar Jenkins. Fue cambiar el enfoque: mover lógica común a Shared Libraries, eliminar freestyle jobs, unificar en pipeline declarativo, parametrizar cliente y entorno, centralizar configuración y eliminar dependencias locales de agentes.
Cuando un pipeline solo funciona porque un nodo tiene una ruta o herramienta concreta, no tienes automatización. Tienes suerte.
A partir de ahí Jenkins dejó de ser una colección de scripts que más o menos funcionaban y pasó a ser una plataforma mantenible.