He estado lidiando con el problema de escalar CI en mi empresa y al mismo tiempo tratando de averiguar qué enfoque tomar cuando se trata de CI y múltiples sucursales. Hay una pregunta similar en stackoverflow, Varias ramas de funciones e integración continua . Comencé uno nuevo porque me gustaría tener más discusión y proporcionar un análisis en la pregunta.
Hasta ahora, he descubierto que hay 2 enfoques principales que puedo tomar (¿o tal vez algunos otros?)
- Múltiples conjuntos de trabajos (hablando de Jenkins / Hudson aquí) por sucursal
- Escribir herramientas para administrar los trabajos adicionales
- Crear / modificar / eliminar trabajos de forma masiva
- Configuraciones personalizadas para cada trabajo por sucursal (URL de SCM, duplicaciones de repositorios de administración de depósitos)
- Algunos ejemplos de personas que abordan este problema con herramientas de shell, scripts de hormigas y la CLI de Jenkins. Ver:
- http://jenkins.361315.n4.nabble.com/Multiple-branches-best-practice-td2306578.html
- http://jenkins.361315.n4.nabble.com/Is-it-possible-to-handle-multiple-branches-where-some-jobs-should-run-on-each-one-without-duplicatin-td954729. html
- http://jenkins.361315.n4.nabble.com/Parallel-development-with-branches-td1013013.html
- Configurar o crear trabajos de hudson automáticamente
- Causará más carga en su clúster de CI
- El ciclo de comentarios para los desarrolladores se ralentiza (si la infraestructura no puede manejar la nueva carga)
- Escribir herramientas para administrar los trabajos adicionales
- Varios conjuntos de trabajos por 2 ramas (desarrollo y estable)
- Administre los dos conjuntos manualmente (si cambia la configuración de un trabajo, asegúrese de cambiar en la otra rama)
- PITA pero al menos tan pocos para gestionar
- Otras ramas adicionales no obtendrán un conjunto de pruebas completo antes de ser enviadas a desarrollo
- Desarrolladores insatisfechos. ¿Por qué un desarrollador debería preocuparse por los problemas de escala de CI? Tiene una solicitud simple, cuando me bifurco, me gustaría probar mi código. Sencillo.
- Administre los dos conjuntos manualmente (si cambia la configuración de un trabajo, asegúrese de cambiar en la otra rama)
Entonces, parece que si quiero proporcionar a los desarrolladores CI para sus propias ramas personalizadas, necesito herramientas especiales para Jenkins (¿API o shellscripts o algo así?) Y manejar el escalado. O puedo decirles que se fusionen más a menudo con DEV y vivan sin CI en ramas personalizadas. ¿Cuál tomarías o hay otras opciones?