tools involves delivery build-process build-automation continuous-integration

build-process - involves - continuous integration tools



¿Qué es un buen proceso de construcción de CI? (8)

¿Qué constituye un buen proceso de construcción de CI?

Usamos CI, pero la implementación en la producción es incluso un objetivo de CI realista cuando tiene dependencias en varios servicios que también deberían implementarse y otras aplicaciones también pueden depender de estos.

¿Es un buen proceso de construcción de CI lo suficientemente bueno cuando se automatiza el control de calidad y el manual a partir de ahí?


Asegúrese de entender la idea detrás de una construcción de CI. CI significa Integración Continua y las compilaciones de CI realmente están destinadas a ser compilaciones descartables que se realizan cuando un desarrollador verifica el código en el sistema de control de origen (o en un intervalo específico) para asegurarse de que los cambios más recientes no rompan la base de código (de ahí la idea de integrar continuamente los cambios a la base del código).

Con ese fin, la tecnología utilizada para el proceso del servidor de compilación real es en gran medida irrelevante en comparación con lo que realmente sucede durante la compilación. Como @pdavis mencionó, la compilación de CI debe compilar la base de código, ejecutar algunos análisis de código (FxCop, StyleCop, Lint, etc.), ejecutar pruebas unitarias y cobertura de código, y ejecutar cualquier otro análisis personalizado que desee realizar que debería afectar el concepto de una construcción "exitosa" o "fallida".

Tener una estructura CI implementada automáticamente en un entorno realmente no cae bajo el control de un servidor de compilación. Dicho esto, siempre puede crear un proyecto separado que se ejecute en el servidor de compilación que maneja la implementación cuando detecta ciertas condiciones (como una compilación completa con éxito), pero eso siempre debe hacerse como algo completamente independiente.


Bueno, eso depende" :)

Usamos nuestro sistema de CI para:

  1. compilación y prueba de unidad
  2. implementar en una sola caja, ejecutar pruebas de integración y análisis de código
  3. implementar en el entorno de laboratorio
  4. ejecutar pruebas de aceptación en sistema de tipo prod
  5. descartar compilaciones que pasan al código para implementar prod

Esto es para un proyecto totalmente nuevo de aproximadamente una docena de servicios y bases de datos desplegados en más de 20 servidores, que también tenían dependencias en media docena de otros servicios "externos".

¿Utiliza una herramienta de CI para implementar su producto en un entorno de producción como un objetivo realista? de nuevo ... "depende"

Por qué querrías hacer esto?

  • si tiene el proceso, puede realizar cambios (y deshacer) más rápido y con más frecuencia
  • menos posibilidades de error humano
  • puede probar la misma estrategia de implementación en un entorno de prueba antes de pasar a la producción y detectar problemas antes

Algunas cosas técnicas que debe abordar antes de poder responder a esto:

  • ¿Cuáles son los requisitos de tiempo de actividad para su sistema? ¿Se le permite tener tiempo de inactividad o tiene que estar despierto las 24 horas, los 7 días de la semana?
  • ¿tiene procesos de control de cambios implementados que requieren intervención / aprobación humana?
  • ¿Es su implementación lo suficientemente robusta para que cualquier componente regrese a un estado conocido si falla una implementación?
  • ¿Su sistema está diseñado para manejar diferentes versiones de servicios o clientes en caso de que uno o varios despliegues de componentes fallen (y usted tiene la anterior reversión al último producto conocido)?
  • ¿el proceso tiene la inteligencia para manejar una implementación parcial donde un componente no puede manejar versiones mixtas de sus dependencias / clientes?
  • ¿Cómo está distribuyendo / actualizando las bases de datos?
  • ¿tiene monitoreado en su lugar para saber cuándo algo va mal?

Aquí hay un par de enlaces relacionados recientes sobre automatización y construcción de las herramientas que necesita .

Cuando se trata de eso, cuanto más complejo es su sistema, más difícil es automatizarlo todo, pero eso no significa que no sea un objetivo digno, sino que requiere mucho más esfuerzo y fuerza de voluntad para lograrlo, todo desde el conocimiento. las dificultades que enfrentará, los problemas que debe tener en cuenta (la falla ocurrirá), los desafíos políticos de la construcción de infraestructura (frente a más características del producto).

Ahora aquí está el gran secreto ... los desafíos técnicos son desafiantes pero no imposibles ... los desafíos políticos pueden ser insuperables. Todo esto cuesta dinero, ya sea en su tiempo de desarrollo o en la compra de soluciones de terceros. Entonces, realmente, ¿puedes construir la solución de $ 1K, $ 10K, $ 100K o $ 1M?

Cualquiera que sea la solución que elija, asegúrese de que la automatización sea sólida primero, complete la segunda ... es decir, asegúrese de tener una solución lo más sólida posible para lograr la implementación en un entorno de prueba en lugar de una solución frágil que se implementa en producción.


CI no pretende ser un mecanismo de despliegue. Es bueno que su CI ejecute cualquier implementación automatizada en un QA / Test Server, para garantizar esos aspectos de su trabajo de construcción, pero yo no usaría un sistema de CI como Cruise Control o Bamboo como medio de implementación.

CI es para crear la base de código periódicamente para automatizar la ejecución de pruebas automatizadas, la verificación de la base de código a través del análisis estático y otras comprobaciones de esa naturaleza.


Cuanto más tarde se descubre un error, más costoso es arreglarlo. Por lo tanto, los errores se deben descubrir lo antes posible. Esta es la motivación detrás de CI.

Un buen IC debería garantizar la captura de tantos errores como sea posible. Toda la aplicación se compone de código (a menudo en varios idiomas), esquema de base de datos, archivos de implementación, etc. Los errores en cualquiera de estos pueden causar errores, por lo que la IC debe tratar de ejercer la mayor cantidad de ellos posible.

CI no reemplaza una disciplina de control de calidad adecuada. Además, CI no necesita ser muy completo en el primer día del proyecto. Uno puede comenzar con un simple proceso de CI que inicialmente realiza compilación básica y pruebas unitarias. A medida que descubra más clases de errores en el control de calidad, debe adaptar el proceso de CI para tratar de detectar las ocurrencias futuras de esos errores. También puede incluir comprobaciones de análisis de código estático, de modo que pueda implementar códigos de diseño e ideales consistentes en la base de código.


Estaba viendo una presentación de ThoughtWorks (creadores de Cruise Control) y realmente abordaron este problema. Su respuesta es que NO la implementación es demasiado compleja para probar. ¿Por qué? Porque de lo contrario, sus clientes se convertirán en sus probadores, que es exactamente donde usted no quiere estar.

Si tiene una estructura de implementación compleja, configure un servidor de visualización. Haga que finja ser todos los sistemas con los que necesita hablar. Siempre pueden comenzar en un buen estado conocido, porque puede restablecer a una imagen limpia.

Para responder a su pregunta inicial, un buen proceso es aquel que permite la comunicación entre el repositorio y los desarrolladores. Si el repositorio está en mal estado (código no compilado, pruebas fallidas, etc.), los desarrolladores lo sabrán lo antes posible para que puedan corregirlo.


Estoy empezando un nuevo proyecto en el trabajo que estoy deseando. Todavía estamos en la etapa de diseño inicial y recientemente hemos completado la arquitectura del sistema lógico. Hemos ordenado nuevos servidores para los entornos de pruebas y etapas y estamos configurando un sistema de compilación de integración continua (CI) basado en Cruise Control ( http://cruisecontrol.sourceforge.net/ ) y MSBuild ( http://msdn2.microsoft. com / en-us / library / wea2sca5.aspx ) que es básicamente un puerto mejorado de ANT. Parece que los archivos del proyecto y la solución Visual Studio 2005 ahora están en formato MSBuild. Cruise Control extraerá automáticamente la fuente de Visual Source Safe (vale, no es Subversion, pero podemos tratarla), compilando y luego ejecutándola a través de fxCop ( http://www.gotdotnet.com/Team/FxCop/ ), nUnit ( http://www.nunit.org/ ), nCover ( http://ncover.org/site/ ), y último pero no alquilado Simian ( http://www.redhillconsulting.com.au/products) / simian / ). Cruise Control tiene una interfaz de sitio web bastante buena para mostrar todos los resultados compilados de varias herramientas e incluso puede mostrar cambios de código de una compilación a otra. También realiza un seguimiento de todas las compilaciones en un historial de compilación. Estoy esperando el desarrollo impulsado por la prueba y creo que este tipo de enfoque combinado con nUnit / nCover debería darnos una idea bastante buena antes de implementar cambios que no hemos roto nada. También hay planes para incorporar algún tipo de prueba automática de interfaz de usuario una vez que estemos lo suficientemente avanzados en el proyecto. Dependiendo de la herramienta, esto debería ser solo una cuestión de instalar la herramienta en el servidor de compilación y llamarlo desde Cruise Control. Dulce.


Un buen proceso de IC tendrá una cobertura de prueba total o casi total. La unidad prueba las clases y los métodos de prueba, en comparación con las pruebas de integración, que prueban múltiples partes del sistema. Cuando configure sus compilaciones CI, pídales que automaticen las pruebas unitarias. De esta forma, las compilaciones de CI pueden ejecutarse varias veces por día. Tenemos el nuestro configurado para ejecutarse cada 2 horas.

Puede tener compilaciones más largas que se ejecutan una vez por día. Estos pueden usar otros servicios y ejecutar pruebas de integración.


¿Es un buen proceso de construcción de CI lo suficientemente bueno cuando se automatiza el control de calidad y el manual a partir de ahí?

Creo que esa implementación "manual" se usa cuando una persona con un rol de ingeniero de implementación tiene miedo de que algo después de la implementación pueda salir mal. Él no tiene confianza en la confiabilidad y estabilidad de las herramientas de implementación.

Esta proeza puede desaparecer con las pruebas de procesos de implementación automatizados en un entorno de tipo prod. También debe probar un mecanismo de reversión después de la implementación.

Cuando estas funciones se prueban lo suficiente, ganarás confianza en este proceso y herramienta que utilizas.