2009-08-31 9 views
9

Actualmente estoy en un proyecto de investigación corto. La compañía en la que trabajo tiene un proceso de lanzamiento muy pesado que empeora a medida que pasa el tiempo. Estamos encontrando más y más problemas con cada lanzamiento, que está empezando a afectar gravemente nuestros horarios de entrega y la calidad de cada lanzamiento. Proporcionamos un gran producto SAAS que se implementa en Internet en una gran granja web. Nuestro proceso de implementación es manejado actualmente por un equipo dedicado, con una participación mínima del desarrollador. Principalmente somos una tienda .NET, sin embargo, también tenemos un par de componentes Java.¿Cómo implementa su empresa su software?

Estoy investigando cómo podríamos mejorar nuestro proceso de control de calidad y despliegue para reducir el desperdicio y llevar más procesos bajo la supervisión de nuestros equipos de desarrollo. Estoy interesado en saber cómo su empresa implementa sus productos (preferiblemente SAAS, pero no limitado a dichos productos) para la producción, así como el viaje a través de las pruebas en su camino hacia allí. Tengo curiosidad por saber qué ha funcionado y qué no, y estoy seguro de que muchos de ustedes tienen historias que contar.

EDITAR (RFC adicional):

Como he continuado mi investigación, me encontré con el concepto de "despliegue continuo", al parecer por primera vez por el equipo de la comunidad en línea 3d IMVU. Suena como un concepto intrigante, aunque quizás un poco complejo. Tengo curiosidad si alguien aquí en SO tiene alguna experiencia con el despliegue continuo? Particularmente con un proyecto grande y complejo que tiene muchas partes. No necesariamente tiene que implementarse continuamente en la producción ... para nuestras necesidades a corto plazo, solo miraríamos la implementación continua a los entornos internos de dev/qa/perftest. Si alguien ha implementado la implementación continua, también tengo curiosidad por saber cómo gestionó el esquema de la base de datos y los cambios/reversiones de datos.

Gracias!

Respuesta

7

Implementamos una solución SaaS de servicios financieros para el entorno en la nube de Amazon AWS. Nuestra solución es 100% Java, por lo que muchas de las herramientas no se aplican a usted, pero los conceptos deberían serlo.

En primer lugar, reducimos el número de sorpresas cuando llega el momento de hacer una versión ejecutando un proceso de integración continuo. Cada vez que un desarrollador revisa el código fuente, la solución completa se genera automáticamente y todas las pruebas de la unidad se ejecutan automáticamente. Las notificaciones de falla se envían por correo electrónico al desarrollador en cuestión y al líder del equipo.

AWS se basa en el concepto de máquinas virtuales. Aprovechamos esto al crear una imagen de máquina virtual (Amazon las llama AMI) que contiene la versión específica del sistema operativo y las aplicaciones (Java, DB, etc.) que deseamos. El proceso de compilación crea todos los artefactos desplegables y luego los copia en una instancia en ejecución basada en ese AMI. Es el mismo proceso para todos los entornos (PRUEBA, DEMO, PROD), excepto para un único proyecto de configuración que encapsula diferencias de versión (por ejemplo, cadenas de conexión).

QA prueba el resultado en el entorno de PRUEBA. Una vez que aprueban la versión, repetimos el proceso de compilación dirigido a PROD (utilizando exactamente las mismas revisiones de control de versión. Recuerde, la única diferencia entre cada entorno es un proyecto de configuración).

En ese punto, creamos una máquina virtual (instancia) que se ejecuta en la base AMI con la base de código PROD y la llamamos STAGING. STAGING pasa por una serie de pruebas de aceptación, tanto automáticas como manuales. Aquí está la parte realmente buena ... ahora, quemamos este entorno (base AMI más nueva versión de nuestra aplicación) en una nueva AMI (imagen de la máquina virtual). Luego creamos nuevas instancias en ejecución de nuestros servidores de aplicaciones basadas en esta nueva imagen, actualizamos el equilibrador de carga para apuntar a estas nuevas instancias y simplemente eliminamos las instancias antiguas. Esa es la belleza de usar máquinas virtuales (al menos, esa es una de las bellas).

Cada vez que necesitamos ajustar la capacidad (horas punta/días), creamos nuevas instancias de servidor de aplicaciones desde la misma AMI de producción y las registramos con el equilibrador de carga. Cuando finaliza el pico, simplemente los eliminamos de la rotación de balanceo de carga, luego eliminamos las instancias adicionales después de unos minutos (para permitir que se completen las sesiones existentes).

+0

Gracias por la respuesta detallada. Suena como la clave que te ayudó a usar máquinas virtuales. Uno de los productos que estamos evaluando es VMware Lab Manager. De lo que reuní sobre AMI, sirve el mismo propósito básico ... máquinas virtuales basadas en plantillas. Supongo que la principal diferencia es que sería alojado por nosotros en nuestro propio hardware. Es bueno saber de un escenario donde la virtualización se ha utilizado con éxito (y en la nube, para arrancar!) – jrista

+0

Le pregunté a jamiedp esta pregunta también, pero ¿qué tan grande es su aplicación? ¿Lo clasificarías como pequeño, mediano, grande o grande? Esto se refiere al tamaño de la base de código, cantidad de configuración y número de usuarios en promedio. ¡Gracias! – jrista

+0

@jrista: supongo que depende de cómo definas esos tamaños, pero los sonidos grandes son correctos. La aplicación es bastante compleja, hace un uso extensivo de las tecnologías empresariales y admite un volumen de transacciones bastante elevado. –

0

¿No está diciendo qué está causando los problemas con sus lanzamientos? Estábamos teniendo problemas porque los archivos incorrectos terminaban en nuestra compilación. Nuestra respuesta a esto fue construir una herramienta que nos diera control y visibilidad en todos los archivos de nuestra compilación. Here es una transmisión de la herramienta que creamos.

+0

No estamos exactamente seguros de qué es lo que específicamente causa problemas. Sabemos que parte de esto tiene que ver con el funcionamiento de nuestros scripts de construcción y el hecho de que nuestros scripts de construcción están estrechamente relacionados con la estructura de carpetas específica y la estructura de bifurcación de nuestro control de origen. Otro problema que creemos que tenemos es TOO MUCHO, lo que requiere un ** lote ** de personas involucradas en cada lanzamiento. Sabemos que debemos apoyar el proceso ... pero no tenemos un "buen proceso de implementación" de referencia para comparar. – jrista

+1

El webcast en el enlace que proporcionó parece estar roto. Comienza a reproducirse durante unos segundos y luego se detiene. – jrista

0

Descargo de responsabilidad: Puedo vender lo que he escrito, pero por ahora, es gratis (y no se ha lanzado oficialmente de todos modos).

Utilizamos un sistema que he escrito.

Funciona al integrarse con su control de fuente y el servidor de CI. Me permite asignar el código a SVN, esperar una compilación en el servidor de compilación y luego, a través de la interfaz de la aplicación, configurarlo para una compilación específica, confirmar a en control de fuente y luego, en los servidores, actualizará. Lo bonito es que puedes actualizar Asynch, por lo que todos los servidores obtendrán la nueva versión al mismo tiempo.

Es un poco más complicado que eso, y requiere una cierta forma de configuración, pero es realmente muy hermoso (en mi opinión muy sesgada) cuando está en acción. Dispárame un correo electrónico si quieres una versión gratis 'alpha' para jugar. Cualquier versión beta de este será gratis también.

- Editar:

proceso general:

  1. Commit al tronco
  2. Espere a que la acumulación de servidor de CI, de construcción es 'desnudo' (no configurado para cualquier servidor)
  3. Implementar compilar, utilizando la herramienta ("dashy"), para probar el servidor
  4. Prueba
  5. Ser feliz con la prueba
  6. Despliegue de construcción (build misma) para vivir servidores

Las fases "Despliegue" consiste en comprometerse con SVN, y luego el programa, también instalado en sus servidores web, se pone la acumulación de SVN.

Efectivamente, agrego un nuevo elemento de nivel "base" en su estructura SVN estándar. Normalmente tienen:

/trunk 
/braches 
/tags 

Con dashy, puedo añadir /releases

/trunk 
/braches 
/tags 
/releases 
+0

Entonces, ¿es este un sistema de compilación preventivo, que intercepta el registro y las compilaciones antes de que se cometa el código (como TeamCity?) No estoy seguro de entender completamente lo que hace ... – jrista

+0

Actualizado con un poco más de información. –

+0

Gracias. Suena interesante. Tengo curiosidad si alguna vez has oído hablar de TeamCity? Ese es otro producto de CI que estoy evaluando. Lo intrigante de TC es que intercepta preventivamente las comprobaciones, compilaciones y verificaciones del control de origen, y solo confirma el control de origen si la compilación y la verificación tienen éxito. De lo contrario, se le notificará al delincuente en un circuito cerrado, y no se encontrará con el problema de que el código incorrecto golpee cualquier rama. No estoy seguro de qué tipos de escenarios de implementación admite, pero la implementación puede ser manejada por el script de compilación de todos modos. http://www.jetbrains.com/teamcity/ – jrista

1

Tenemos una solución SaaS y, básicamente, utilizar el mismo proceso (servidor de integración continua, scripts de implementación para la prueba de puesta en escena-producción) Eric arriba, pero lo implementamos en nuestra propia infraestructura usando scripts personalizados basados ​​en PSTools (http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx) para hacer todo el copiado a los nodos de la granja.

Para cada implementación evaluamos si es posible permitir que diferentes nodos tengan diferentes versiones de la aplicación (es decir.no hay riesgos de integridad de datos) o tenemos que desconectar la aplicación durante unos segundos para sincronizar todos los nodos (la aplicación tarda unos 20 segundos en volver a estar en línea, ya que solo hace frente a las aplicaciones, desde un nodo maestro) ; pero la clave es tener una configuración de proceso de implementación de "una sola clave".

+0

Por curiosidad, ¿qué tan grande es su aplicación? ¿Lo clasificarías como pequeño, mediano, grande o grande? Gracias. :) – jrista

+0

La pregunta en mi último comentario se refiere al tamaño de la base de código, cantidad de configuración y número de usuarios en promedio. Gracias. – jrista

+0

Todo el conjunto de aplicaciones tiene aproximadamente .4 millones de líneas de código y está dividido en varios componentes (interfaz, servicios web, dal, etc.) que podríamos implementar de forma independiente, aunque normalmente no lo hacemos. En cuanto a la configuración, todos los cambios de configuración son gestionados/cambiados por nuestras secuencias de comandos de implementación ... y son básicamente cambios en las cadenas de conexión, referencias de servicio preparadas en el nodo principal y twicked en cada nodo de usuarios, tenemos alrededor de 10,000 usuarios de registro, y durante el día tenemos alrededor de 300 sesiones activas al mismo tiempo, siempre tratamos de implementar en el momento de pick bajo donde tenemos 10 ~ 15 sesiones – Jaime

Cuestiones relacionadas