2009-08-13 11 views
10

Estoy usando PHPUnderControl que se ejecuta sobre Cruise Control para mi integración continua y pruebas unitarias. También tengo configurado para ejecutar PHPDocumentor para generar phpdoc para mí y ejecuta PHP Code Sniffer para aplicar los estándares de codificación para mí. Pero ahora quiero configurar algo en ese mismo servidor (Ubuntu) para facilitar la implementación en un servidor remoto. Ya lo tengo configurado así que después de cada compilación exitosa se hace una exportación SVN desde el tronco a un directorio dentro de la carpeta de proyectos en el servidor.PHP Build system

He estado pensando en escribir un pequeño script PHP personalizado que SSH a un servidor remoto configurado, Tarball hasta la última exportación, copiarlo, descomprimir y ejecutar cualquier migraciones. Un script PHP como este no debería ser demasiado difícil al principio, a menos que necesite comenzar a escalar a varios servidores. Sé que hay sistemas como Phing, Fabric y otros.

Mi pregunta es si alguien tiene alguna experiencia con estos y puede proporcionar alguna de pros y los contras? Empecé a configurar Phing en mi servidor y probaré Fabric junto a ellos para jugar con ellos, pero me preguntaba si alguien que los haya usado de forma más exhaustiva, o que haya tenido que escalarlos, podría proporcionarnos algunos comentarios.

Respuesta

8

He usado Capistrano con PHP (aunque es más una cosa de los carriles-y como está escrito en Ruby).

Ha sido muy sencillo de usar, pero que no he dicho tenido que reducir mucho con ella. Sin embargo, sí lo hacemos en varios servidores de etapas/producción diferentes, y la extensión de varias etapas ha sido útil en esos escenarios.

Sin embargo, como la mayoría de las cosas de Ruby, hay muchos ganchos y "magia" que pueden ser confusos si eres nuevo en Capistrano e intentas hacer algo complicado con él.

En cuanto a cómo se compara con otras herramientas de implementación, no puedo comentar. Sé que solíamos usar Phing, pero no estoy seguro de por qué nos cambiamos a Capistrano.

+0

me gusta Capistrano. +1 –

0

Si tuviera que implementar un sistema de este tipo de implementación, probablemente optaría por una solución ligeramente diferente de lo que usted ha esbozado anteriormente. En lugar de tener un código que se ejecute localmente en mi sistema, me conecte a una lista de servidores remotos y haga el "trabajo" allí, empacaré el módulo de actualización con el resto del código y haré que extraiga los datos de actualización de mi servidor a pedido. (o mejor dicho, cuando le "dije" que lo hiciera). De esta forma, tendrá mucho menos de qué preocuparse (solo debe enviar el código actualizado a través de http cuando lo solicite, y el servidor remoto se encarga del resto). Solo mis 2 centavos.

1

Utilizamos phing y nos ha sido útil. No lo usamos para empaquetar, pero no debería ser demasiado difícil hacer lo que está buscando. Lo usamos principalmente para tareas comunes como limpiar cachés, construir sitios de desarrollo y otras tareas para ayudar en el desarrollo. Ha sido una gran ayuda, y por lo que puedo deducir, parece ser un clon de hormiga, aunque podría no tener toda la funcionalidad que tiene la hormiga.

0

He escrito mi propia rsync como herramienta para esto porque trabajo desde una conexión a Internet muy mal en una tercera contry mundo y tienen todo tipo de fallos y conexiones de hambre así que rsync no funciona.

En el sistema remoto al menos debe escribir un guión litte que está haciendo copias de seguridad antes de las migraciones en ejecución.

Mejor es que está utilizando un sistema de espejos independiente totales en el sistema de alojamiento web y se incluyen algunas pequeñas pero fundamentales pruebas de unidad después de una migración. Luego haga un cambio de raíz para poner el sitio web actualizado en línea. Esto requeriría ejecutar algunos servicios interactivos en modo de solo lectura durante la migración (desafortunadamente una característica que no muchas personas implementan).

Pero antes que nada, piense que si realmente vale la pena hacer esto, si solo actualiza cada trimestre, basta con una simple lista de verificación en papel.

2

Si te gusta Capistrano, pero ojalá fuera un poco más PHP, echa un vistazo a Fredistrano.

Escribí una compilación automatizada (exportación SVN, codificación Zend Guard, etc.) y un sistema de implementación usando Phing una vez y encontré bastante doloroso de usar. Cada vez que tenía que escribir una tarea especial, sentía que tenía que saltar a muchos aros solo para que funcionara.

Así que, en estos días solo escribo scripts bash sencillos que compilan con SVN checkout, codificación, creación de una etiqueta en SVN e implementación a través de rsync. Puede ser de baja tecnología, y Phing puede tener algunas características superiores, pero al menos no se interpone en mi camino.

2

Hay una nueva herramienta de compilación, llamada Bldr. Utiliza Yaml para config, en lugar de xml como la mayoría de los sistemas de compilación, y es altamente extensible.

http://bldr.io