2009-06-15 9 views
9

Tener la "compilación de un empuje" para llevar sus cambios desde el entorno de desarrollo al servidor en vivo es una cosa que es muy agradable tener ya menudo se recomienda.¿Cómo se implementa la "compilación de un paso" para un proyecto LAMP?

Vine a bordo con un pequeño equipo ejecutándose en una pila LAMP y uso SVN para control de versiones, actualmente implementado en un único servidor de producción (otro servidor para desarrollo y pronto para ser un servidor mysql separado). Ahora estoy implementando muchas de las cosas organizativas que me faltan antes de incorporarme.

Tengo curiosidad por ver

  1. cómo la gente está haciendo esto (un paso de generación) Actualmente
  2. ver cómo puedo poner en práctica lo mejor para mi situación (pequeño equipo, el medio ambiente de la lámpara con SVN)

Algunos desafíos particulares que me interesan serían el manejo de los cambios en la base de datos (esquema) y también, y qué tipo de "paquetes" usan las personas para organizarse (por ejemplo, RPM, PEAR, etc.).

Respuesta

7

Utilizamos ant con Hudson. Trabajado como un encanto.

Hudson también trabajaría con otros sistemas de compilación, y no solo con proyectos de Java. Le permite configurar múltiples objetivos de compilación, y los ejecutará automáticamente o manualmente. También te obliga a implementar una forma de ejecutar tu compilación desde un solo comando.

No resuelve los problemas de comunicación en los que el servidor no estará disponible durante el tiempo que lleva ejecutar la compilación para el servidor implementado.

Para nuestras actualizaciones del esquema y los cambios, que configura nuestra secuencia de comandos de hormigas que hacer dos cosas:

  1. ejecución de actualización del esquema sólo si hay una diferencia en el SVN.
  2. Compruebe en un volcado de esquema después de que se generaron los cambios de esquema.
  3. Si no había ninguna actualización para el esquema, sólo tiene que utilizar el vertedero para cargar una base de datos

Lo que tomar varios intentos para hacerlo bien, pero de repente que había resuelto el problema de múltiples desarrolladores de estar en diferentes esquemas . Era tan fácil importar el volcado para actualizar su esquema de desarrollo, que podía hacerlo a diario.

+1

Hudson es impresionante. – stimms

2

Hacemos. Usamos un producto llamado Anthill Pro para hacer todas nuestras construcciones e implementaciones. Tiene un proceso de flujo de trabajo que se configura para verificar los archivos, hacer las compilaciones, ejecutar las pruebas unitarias y luego implementar el código en los servidores. Puede usarlo para implementar casi cualquier cosa, ya que el proceso puede ejecutar programas de línea de comandos, etc.

1

"make" en UNIX (y Windows) es su amigo. Sin embargo, tiene una curva de aprendizaje, pero vale la pena. Puede hacer actualizar la fuente, compilar, probar, etc., etc.

2

No creo que haya una respuesta simple para este libro, porque esto depende mucho de su entorno. Sea lo que sea que se te ocurra, recomiendo encarecidamente un enfoque basado en guiones, con las secuencias de comandos de implementación en control de fuente. Esos scripts también permitirán una mejor integración con las soluciones de compilación (ver a continuación).

La secuencia de comandos más simple para ejecutar en su entorno de producción sería simplemente el comando para obtener la última versión (u obtener una versión específica) del control de origen.

El siguiente desafío es la implementación de la base de datos. La solución que más me ha gustado para proyectos pequeños y medianos es mantener una tabla de versiones de esquema en cada base de datos y tener todas las secuencias de comandos DDL y de actualización de datos en control de código fuente (incluidas las fuentes de datos que utilizan en archivos comprimidos). Los scripts se numeran consecutivamente (comenzando 000001 ..., 000002 ..., etc.) y el script de implementación que ejecuto simplemente primero realiza una copia de seguridad de la base de datos existente, luego obtiene el último script de la base de datos de ejecución desde la tabla de versiones del esquema y luego ejecuta cualquier nueva secuencia de comandos de base de datos encontrada en el control de fuente en el orden correcto, actualizando la tabla de versión de esquema en consecuencia.

Este enfoque me permite reconstruir la base de datos desde cero muy rápidamente.

Los dos enfoques tomados en conjunto hacen que sea posible desplegar rápidamente su base de código a varias máquinas diferentes de estadificación, el entorno de control de calidad, beta, etc.


Por sólo un poco escenarios más complejos, que debiera ejecutar un servidor de integración de construcción continua, como Kieveli et. Alabama. sugerido, que esencialmente "reconstruye" toda su implementación de manera regular y, por lo tanto, contiene scripts para hacer exactamente lo que ejecutaría "manualmente" más arriba.

La implementación de la base de datos también puede hacerse más sofisticada mediante la creación de un script de reversión para cada script de base de datos. A continuación, debe escribir una pequeña aplicación de controlador para manejarlos. Hay varias soluciones de OSS para este tipo de cosas y una de ellas puede adaptarse a sus necesidades.

PERO, asegurarse de que nunca auto-implementar la base de datos para un entorno de producción ;-)

2

Mejor herramienta de construcción para un proyecto de PHP es probablemente Phing, que es bastante similar a la hormiga, pero está escrito en PHP. Contiene todas las cosas necesarias que necesitarías para algo como esto, como tomar cosas de tu svn repo.

0

Una vez que tenga una compilación de un paso, puede convertirla fácilmente en compilaciones continuas.

Tenemos todas nuestras compilaciones completadas, marcadas con el número de modificación desde el que se crearon, en un servidor central. Cuando se comete un error (utilizamos Perforce, pero esto funcionaría para SVN), un cronjob en uno de nuestros cuadros de construcción detecta que hay un cambio más reciente que build, se activa una solicitud http para descargar el árbol de origen y comienza a construir (con GMake, principalmente). Creaciones continuas en solo unos sencillos pasos :)

Después de eso, es un paso corto para que toda la automatización de prueba se ejecute automáticamente. Código completamente desarrollado y probado (¡posiblemente implementable!) Después de cada confirmación.

0

Para el lenguaje de scripting, los consejos habituales como el uso de ant-variant o la variante CruiseControl no significan mucho porque no es necesario compilar nada.

Nos peguemos a la base de datos. Tres cosas importantes cuando se trata de integración continua es automatizar, automatizar y automatizar. Esto significa que debe tener todo desde crear una base de datos vacía, importar desde datos externos y actualizar a una nueva versión con scripts y lista para ejecutarse usando algunos scripts. Un buen ejemplo de eso puede ser algo así como MediaWiki, que te permite configurarlo e instalarlo usando php. Recomendaría ejecutar el servidor de compilación para desplegar una nueva base de datos durante el día, ejecutar pruebas de unidad y enviar correos electrónicos si alguno falla.

0

La forma en que pienso de él es que desea una secuencia de comandos para tirar todo junto, básicamente obtener todos los archivos \ recursos de control de origen de un el realizar todos los pasos para crear un 'producto' final de

Fuera de la Estos pasos pueden incluir obtener los últimos, compilar, obtener cualquier otro archivo necesario para completar el producto, crear el instalador (si es necesario), ejecutar pruebas unitarias, compartir resultados en el servidor (lo que eso signifique para un proyecto en particular) y informar a los usuarios que se ha creado una nueva versión (o decirles si no, y por qué). Y cualquier otra cosa que necesites hacer.

En el pasado usualmente comencé con algún tipo de archivo por lotes, y luego creé algún tipo de administrador de compilador personalizado. Pero mantener eso siempre se convirtió en un dolor. Eventualmente muevo una aplicación de terceros ... ahora solo uso uno de los dos productos a continuación.

http://www.kinook.com/VBP/

http://www.finalbuilder.com/

Cuestiones relacionadas