12 votos

mejorar nuestra estrategia de implementación

Tenemos un ecommerce de la aplicación que desarrollamos en nuestra empresa. Su razonablemente una LÁMPARA estándar de la aplicación que hemos estado desarrollando durante cerca de 3 años. Desarrollamos la aplicación en un dominio de pruebas, aquí podemos agregar nuevas características y corrección de errores, etc. Nuestro seguimiento de errores y el desarrollo de funciones se administra dentro de un alojado de subversion solución (unfuddle.com). Como los insectos se informó que estas correcciones en el dominio de pruebas y, a continuación, confirmar los cambios a svn cuando estamos felices de que el error ha sido corregido. Seguimos el mismo procedimiento con la adición de nuevas características.

Cabe señalar que existe la arquitectura general de nuestro sistema y de la aplicación a través de nuestros servidores. Cada vez que una función es desarrollada que rodar esta actualización a todos los sitios de nuestra aplicación (siempre un servidor de control). Cada sitio utilizando nuestro sistema esencialmente utiliza exactamente los mismos archivos que el 95% de la base de código. Tenemos un par de carpetas dentro de cada sitio que contienen los archivos a medida que el sitio de los archivos css / images etc. Aparte de que las diferencias entre cada sitio son definidos por la configuración de varios ajustes dentro de cada uno de los sitios de la base de datos.

Esto se pone en la implementación real de sí mismo. Como y cuando estamos listos para poner en marcha una actualización de algún tipo que ejecute un comando en el servidor que el sitio de prueba está activado. Este realiza una copia de comandos (cp-fru /testsite/ /othersite/) y pasa a través de cada vhost fuerza la actualización de los archivos por fecha de modificación. Cada servidor adicional de acogida que tiene un vhost que nos rsync la producción de base de código y, a continuación, repita el procedimiento de copia en todos los sitios en que servidor. Durante este proceso que nos movemos los archivos que no queremos que se sobrescriban, moviendo de nuevo cuando la copia se ha completado. Nuestro despliegue de secuencia de comandos realiza una serie de otras funciones tales como la aplicación de comandos SQL para alterar cada base de datos, añadir campos / nuevas tablas, etc.

Estamos cada vez más preocupados de que nuestro proceso no es lo suficientemente estable, no es tolerante a fallos y que también es un poco de un método de fuerza bruta. También estamos conscientes de que no están haciendo el mejor uso de subversion, tenemos una posición donde trabajando en una nueva característica nos impide el despliegue de una importante corrección de error, ya que no estamos haciendo uso de ramas o etiquetas. También le parece mal que tenemos mucho de replicación de archivos a través de nuestros servidores. Tampoco somos capaces de realizar fácilmente una reversión en lo que acabamos de anunciar. Realizamos un diff antes de cada desplegable para que podamos obtener una lista de archivos que se va a cambiar así que sabemos lo que ha cambiado después, pero el proceso de reversión aún sería un problema. En términos de la base de datos he empezado a buscar en dbdeploy como una solución potencial. Lo que realmente queremos, aunque es una orientación general acerca de cómo podemos mejorar nuestro archivo de gestión y de implementación. Idealmente, queremos que la gestión de archivos a estar más estrechamente vinculado a nuestro repositorio, de modo que un despliegue / reversión estar más conectados a svn. Algo así como mediante el comando exportar para asegurarse de que el sitio de los archivos son los mismos que el repo de archivos. También sería bueno, aunque si la solución tal vez también detener la replicación de archivos en torno a nuestros servidores.

Haciendo caso omiso de nuestros métodos actuales sería muy bueno escuchar cómo otras personas se enfoque el mismo problema.

para resumir ...

  • ¿Cuál es la mejor manera para hacer que los archivos a través de múltiples servidores de permanecer en sincronización con svn?
  • ¿Cómo debemos prevenir archivo la replicación? los enlaces simbólicos / algo otra cosa?
  • ¿Cómo debemos estructurar nuestro repo así podemos dev nuevas características y corrección de edad queridos?
  • ¿Cómo debemos gatillo lanzamientos/reversiones?

Gracias de antemano

EDITAR:

He leído un montón de cosas buenas recientemente sobre el uso de Phing y Capistrano para este tipo de tareas. ¿Alguien puede dar más información acerca de ellos y de lo bueno que sería para este tipo de tarea?

6voto

David Pashley Puntos 17011

Mi consejo para hacer versiones es tener la Característica de Versiones y Versiones de Mantenimiento. Cuentan con Versiones serían las versiones de que obtener nuevas características. Estos se añaden a su subversión del tronco. Cuando crees que estas son características completas, sucursal estas en un comunicado de la rama. Una vez que el proceso de control de calidad es feliz con esta versión, la etiqueta de la liberación y de implementar el código a sus servidores.

Ahora, cuando usted consigue un informe de error, usted se compromete, esta revisión a la rama y el puerto al tronco. Cuando estés satisfecho con el número de errores corregidos, puede etiquetar e implementar una Versión de Mantenimiento.

Es importante que usted tenga una sucursal de su código base (o tienen la capacidad de crear uno por conocer el vivir de revisión) que es independiente de su rama de desarrollo, de modo que usted tiene la capacidad para implementar correcciones a su código en vivo sin tener que implementar nuevas funciones o código no probado.

Me gustaría recomendar el uso de su distribución nativa del sistema de envasado para la implementación de nuevo código. Si usted tiene un paquete que contiene todo el código base, usted sabe que todo el código se ha implementado en una especie de operación atómica, usted puede ver qué versión está instalada en una vista, puede verificar su base de código de uso de los paquetes a la suma de comprobación. Revertir es sólo un caso de la instalación de la versión previamente instalada del paquete.

El único obstáculo que puedo ver para que esta aplicación es que usted no parece tener varias copias de la base de código para diferentes clientes que se ejecutan en un único servidor. Me gustaría intento de organizar el código para que todos los clientes que se ejecute fuera de los mismos archivos y no el uso de las copias. No sé lo fácil que sería para usted, pero reduciendo el número de copias que tienen que lidiar con masivamente a reducir su dolor de cabeza.

Estoy asumiendo que, como usted ha mencionado de la LÁMPARA, estás usando PHP u otro lenguaje de scripting, que no requiere de un proceso de compilación. Esto significa que usted está probablemente perdiendo una maravillosa llamado proceso de Integración Continua. Lo que esto significa básicamente es que el código está continuamente siendo probado para asegurarse de que todavía está en un liberable estado. Cada vez que alguien se comprueba en el nuevo código, un proceso de toma y ejecuta la construcción y pruebas del proceso. Con un lenguaje compilado que por lo general el uso de esto para asegurarse de que el código compilado. Con cada lengua que se debe aprovechar la oportunidad para ejecutar las pruebas unitarias (el código está en comprobables unidades ¿no?) y las pruebas de integración. Para los sitios web, una buena herramienta para poner a prueba las pruebas de integración es el Selenium. En nuestra Java se basa, también medimos la cobertura de código y el código de métricas para ver cómo avanzamos en el tiempo. El mejor servidor CI hemos encontrado para Java es Hudson, pero algo como buildbot podría funcionar mejor para otros idiomas. Usted puede construir paquetes con su servidor CI.

1voto

Nikolas Sakic Puntos 461

Empezamos a usar Puppet (producto emblemático de la Reductora de Laboratorios). Es un Rubí basado en el marco para la automatización de sys-admin puestos de trabajo. Yo estaba en puppetcamp hace un par de semanas, y aquí están los enlaces de vídeo:

Lucas Kanies La Presentación De Puppet De La Intro

También, si quieres ver todas las presentaciones realizadas en puppetcamp en san francisco, este es el enlace:

Presentaciones realizadas en cómo otros utilizan Puppet

Disfrutar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: