php - utero - Ayúdame a mejorar mi flujo de trabajo de implementación continua
se puede tener hijo sin matriz (4)
¿Cuántas personas están trabajando en eso? Si solo tienes 10 o 20 desarrolladores, no estoy seguro de que tenga sentido poner en marcha un flujo de trabajo tan elaborado. Si administras 500, seguro ...
Mi sentimiento personal es KISS. Mantenlo simple, estúpido ... Quieres un proceso que sea tanto eficiente como más importante: simple. Si es complicado, o nadie lo hará bien o, después de un tiempo, las piezas se resbalarán. Si lo haces simple, se convertirá en una segunda naturaleza y después de unas semanas nadie cuestionaría el proceso (bueno, la semántica de todos modos) ...
Y la otra sensación personal es ejecutar todas las pruebas UNIT. De esta forma, puede omitir un árbol de decisión completo en su diagrama de flujo. Después de todo, lo que es más caro, unos minutos de tiempo de CPU o los ciclos cerebrales para comprender la diferencia entre el pase de prueba parcial y el error de prueba masiva. Recuerde, un error es un error, y no hay ninguna razón práctica para que el código se muestre alguna vez a un revisor que tiene el potencial de fallar la compilación.
Ahora, las pruebas de Selenium suelen ser bastante costosas, por lo que podría aceptar retirarlas hasta que el revisor las apruebe. Pero tendrás que pensar en eso ...
Ah, y si estuviera implementando esto, pondría una etapa de control de calidad formal allí. Quiero que los verificadores humanos observen los cambios que se están realizando. Sí, Selenium puede verificar lo que sabes, pero solo un humano puede encontrar cosas en las que no hayas pensado. Retroalimente sus hallazgos a nuevas pruebas de Selenio e Integración para evitar regresiones ...
He estado desarrollando un flujo de trabajo para practicar un ciclo de implementación continuo en su mayoría automatizado para un proyecto de PHP. Me gustaría obtener algunos comentarios sobre el posible proceso o los cuellos de botella técnicos en este flujo de trabajo, sugerencias para mejorar e ideas sobre cómo automatizar mejor y aumentar la facilidad de uso para mi equipo.
Componentes principales :
- Servidor de
Hudson
CI -
Git
yGitHub
- Pruebas de unidades
PHPUnit
-
Selenium RC
-
Sauce OnDemand
para pruebas en la nube automatizadas, entre navegadores, conSelenium RC
-
Puppet
para automatizar las implementaciones del servidor de prueba -
Gerrit
para la revisión del código de Git -
Gerrit Trigger
paraHudson
EDITAR : He cambiado el gráfico de flujo de trabajo para tener en cuenta las contribuciones de ircmaxwell: eliminando la extensión de PHPUnit
para Selenium RC
y ejecutando esas pruebas solo como parte de la etapa de control de calidad; agregar una etapa de control de calidad; mover la prueba de UI después de la revisión del código pero antes de fusionarse; movimiento se fusiona después de la etapa de control de calidad; moviendo la implementación después de la fusión.
Este gráfico de flujo de trabajo describe el proceso. Mis preguntas / pensamientos / preocupaciones siguen.
Mis preocupaciones / pensamientos / preguntas :
Dificultad general para usar este sistema
Participación en el tiempo
Dificultad para emplear a
Gerrit
.Dificultad para emplear
Puppet
.Nos desplegaremos en instancias de
Amazon EC2
más tarde. Si vamos a configurar paquetes deDebian
conPuppet
y desplegar en segmentosLinode
ahora, ¿existe un potencial para que una implementación en funcionamiento enLinode
rompa enEC2
? ¿Deberíamos, en cambio, hacer nuestras construcciones y despliegues enEC2
desde el principio?Otra pregunta re:
EC2
yPuppet
. También estamos considerando usar Scalr como una solución. ¿Tendría tanto sentido evitar la sobrecarga dePuppet
solo por esto e invertir en Scalr? Tengo una preocupación secundaria (¡ja!) Sobre el costo; las pruebas deSelenium
no deberían ejecutarse conEC2
frecuencia que las instancias de compilación deEC2
se ejecutarán las 24 horas del día, los 7 días de la semana, pero para algo así como una compilación de cinco minutos, pagar una hora deEC2
parece mucho.Posibles cuellos de botella de proceso en las fusiones.
¿Se pudo mover "A"?
Créditos : porciones de este flujo de trabajo están inspiradas en la impresionante publicación de Digg sobre implementación continua . El gráfico de flujo de trabajo anterior está inspirado en el Android OS Project .
Importante para hacer sus pruebas extremadamente rápido , es decir, sin IO y capacidad para ejecutar pruebas parallel y distribuidas. No sé qué tan aplicable es con php, pero si puede probar unidades de código en la memoria db y burlarse del entorno, estará mejor.
Si tiene un QA / QC o cualquier humano en el camino entre el compromiso y la producción, tendría un problema para llegar a una implementación continua completa . La clave es su confianza en sus pruebas, monitoreo y respuesta automática (sistema inmune) lo suficiente como para eliminar el proceso propenso a errores humanos en evolución de su sistema.
No sé si esto es relevante para PHP, pero puede reemplazar al menos parte de la etapa de revisión del código con análisis estático.
La calidad de las revisiones de código depende de la calidad de los revisores, mientras que el análisis estático se basa en las mejores prácticas y patrones, y es completamente automático. No digo que las revisiones de código se deben abandonar, simplemente creo que se puede hacer fuera de línea.
Ver
http://en.wikipedia.org/wiki/Static_code_analysis
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
Todos los traspasos entre funciones tienen el efecto de ralentizar las cosas, y con eso, un aumento de la cantidad de cambio (y, por lo tanto, de riesgo) que entra en una implementación.
Las puertas de calidad manuales son, por definición, una aceptación de que la calidad no se ha incorporado desde el principio. La única razón por la cual el código necesita ser revisado más tarde es porque existe la creencia de que la calidad ya no es lo suficientemente buena.
Actualmente estoy tratando de eliminar la revisión formal del código de nuestros canales por exactamente esta razón. Causa retrasos en la retroalimentación y cita a Martin Fowler:
"El objetivo de la Integración Continua es proporcionar una respuesta rápida. Nada absorbe la sangre de una actividad de CI más que una construcción que lleva mucho tiempo".
En su lugar, me gustaría hacer que el código revise algo que los peticionarios solicitan si es necesario, o de lo contrario se hace en el momento de la codificación por los miembros del equipo, tal vez una programación de pares XP.
Creo que debe ser su objetivo que una vez que el código se fusione con el control de la fuente, no haya absolutamente ninguna intervención manual.