deployment get - ¿Cuál es su estrategia preferida de implementación de php?




tag name (13)

Estoy comenzando un nuevo proyecto en PHP y me encantaría obtener algunos comentarios de otros desarrolladores sobre su estrategia preferida para la implementación de PHP. Me encantaría automatizar las cosas un poco para que una vez que se hayan confirmado los cambios, puedan migrarse rápidamente a un servidor de desarrollo o producción.

Tengo experiencia en despliegues que usan Capistrano con Ruby, así como algunas secuencias de comandos de shell básicas.

Antes de lanzarme de cabeza por mi cuenta, sería genial escuchar cómo otros se han acercado a esto en sus proyectos.

Más información

Actualmente, los desarrolladores trabajan en las instalaciones locales del sitio y confirman los cambios en un repositorio de subversión. Las implementaciones iniciales se realizan exportando una versión etiquetada de svn y cargándola al servidor.

Por lo general, los cambios adicionales se realizan de forma gradual cargando manualmente los archivos modificados.


Answers

Llego muy tarde a la fiesta, pero pensé que compartiría nuestros métodos. Usamos Phingistrano con Phingistrano , que proporciona funcionalidad similar a Capistrano a Phing a través de archivos de compilación preconstruidos. Es genial, pero solo funciona si usas Git en este momento.


Un año tarde pero ... En mi caso, la implementación no es automática. Me parece peligroso implementar código y ejecutar scripts de migración de base de datos automáticamente.

En cambio, los enlaces de subversión se utilizan para implementar solo en el servidor de prueba / transferencia. El código se implementa en producción al final de una iteración, después de haber ejecutado pruebas y se ha asegurado de que las cosas funcionen. Para la implementación en sí, utilizo un Makefile hecho a medida que usa rsync para transferir archivos. El Makefile también puede ejecutar los scripts de migración en el servidor remoto, pausar / reanudar la web y los servidores de bases de datos.


Para PHP, SVN con scripts de compilación Phing son el camino a seguir. Phing es similar a ANT pero está escrito en PHP, lo que hace que sea mucho más fácil para los desarrolladores de PHP modificar sus necesidades.

Nuestra rutina de implementación es la siguiente:

  • Todo el mundo se desarrolla en el mismo servidor local en el trabajo, cada desarrollador tiene un pago en su máquina en casa también.
  • Los commits desencadenan un enganche post-commit que actualiza un servidor de transferencia.
  • Las pruebas se ejecutan en el servidor intermedio, si pasan, continúe.
  • Se ejecuta la secuencia de comandos de construcción Phing:
  • Toma el servidor de producción, cambiando el dominio a una página "En construcción"
  • Ejecuta la actualización de SVN en el proceso de producción
  • Ejecuta el script schema deltas
  • Ejecuta pruebas
  • Si las pruebas fallan, ejecute el script de reversión
  • Si pasan las pruebas, el servidor vuelve a la salida de producción

También hay phpUnderControl , que es un servidor de integración continua. No me pareció muy útil para que los proyectos web sean honestos.


Phing es probablemente su mejor opción, si puede soportar el dolor de los archivos de configuración xml. El framework Symfony tiene su propio puerto de rake (pake), que funciona bastante bien, pero está bastante unido al resto de Symfony (aunque probablemente podrías separarlos).

Otra opción es usar Capistrano. Obviamente, no se integra tan bien con PHP, como lo hace con Ruby, pero aún puedes usarlo para muchas cosas.

Por último, siempre puedes escribir scripts de shell. Hasta ahora, eso es lo que hice.


Tengo una copia de trabajo de una rama de versión SVN en el servidor. Actualizar el sitio (cuando no hay cambios de esquema) es tan fácil como emitir un comando de actualización de SVN. Ni siquiera tengo que desconectar el sitio.


Hago cosas manualmente usando Git. Un repositorio para desarrollo, que obtiene git push --mirror en un repositorio público, y el servidor en vivo es un tercer repositorio extraído de eso. Esta parte, supongo, es la misma que tu propia configuración.

La gran diferencia es que utilizo ramas para casi todos los cambios en los que estoy trabajando (tengo alrededor de 5 en este momento), y tiendo a ir y venir entre ellos. La rama principal no se cambia directamente, excepto para fusionar otras ramas.

Ejecuto el servidor directo directamente desde la rama principal, y cuando termino con otra rama y listo para fusionarlo, volteo el servidor a esa rama por un tiempo. Si se rompe, devolverlo al maestro tarda segundos. Si funciona, se fusiona en maestro y el código en vivo se actualiza. Supongo que una analogía de esto en SVN sería tener dos copias de trabajo y señalar el directo a través de un enlace simbólico.


Utilizo ANT para implementar en diferentes objetivos (dev, QA y Live). Ant está diseñado para trabajar con la implementación de Java, pero proporciona una solución de caso general bastante útil para implementar archivos arbitrarios.

La sintaxis del archivo build.xml es bastante fácil de aprender: usted define diferentes objetivos y sus dependencias que se ejecutan cuando llama al programa ant en la línea de comando.

Por ejemplo, tengo objetivos para dev, QA y Live, cada uno de los cuales depende del objetivo cvsbuild que verifica la última revisión principal de nuestro servidor CVS, copia los archivos apropiados en el directorio de compilación (usando la etiqueta del conjunto de archivos) y luego rsyncs el directorio de compilación al servidor apropiado. Hay algunas peculiaridades que aprender, y la curva de aprendizaje no es totalmente plana, pero lo he estado haciendo así durante años sin problemas, así que lo recomendaría para su situación, aunque tengo curiosidad por saber qué otras respuestas Veremos en este hilo.


Sé que Phing ha sido mencionado algunas veces, pero he tenido mucha suerte con phpUnderControl . Para nosotros

  1. Vea copias individuales de las sucursales en las máquinas locales
  2. Las ramas se prueban y luego se fusionan en Tronco
  3. Los commits to Trunk son construidos automáticamente por phpUnderControl, ejecuta pruebas y crea toda la documentación, aplica deltas de base de datos
  4. Troncal se ejecuta a través de pruebas de calidad y luego se fusionó en nuestra rama estable
  5. Nuevamente, phpUnderControl construye automáticamente Stable, ejecuta pruebas y genera documentación y actualiza la base de datos.
  6. Cuando estamos listos para avanzar hacia la producción, ejecutamos un script rsync que respalda a Production, actualiza la base de datos y luego empuja los archivos hacia arriba. El comando rsync se invoca a mano para asegurarnos de que alguien esté viendo la promoción.

Actualmente estoy implementando PHP usando Git . Una simple producción de git push es todo lo que se necesita para actualizar mi servidor de producción con la última copia de Git. Es fácil y rápido porque Git es lo suficientemente inteligente como para enviar solo los diffs y no todo el proyecto de nuevo. También ayuda a mantener una copia redundante del repositorio en el servidor web en caso de que falle el hardware (aunque también presiono a GitHub para que esté seguro).


Utilizamos Webistrano , una interfaz web para Capistrano, y estamos muy contentos con ella.

Webistrano permite implementaciones multi-etapa y multi-entorno desde SVN, GIT y otros. Tiene soporte integrado de reversión, soporte para roles de servidor separados como web, db, aplicación, etc., y se implementa en paralelo. Le permite anular los parámetros de configuración en múltiples niveles, como por etapa, y registra los resultados de cada implementación, opcionalmente enviándola por correo.

Aunque Capistrano y Webistrano son aplicaciones de Ruby, la sintaxis de las "recetas" de implementación es fácil y lo suficientemente poderosa como para que cualquier programador de PHP lo entienda. Originalmente, Capistrano se construyó para proyectos de Ruby on Rails, pero se adapta fácilmente a proyectos de PHP.

Una vez configurado, es aún más fácil de ser utilizado por quienes no son programadores, como los probadores que implementan una versión provisional.

Para proporcionar la implementación más rápida posible, instalamos el método fast_remote_cache , que actualiza una caché svn working-copy en el servidor remoto y luego enlaza el resultado.


Que automáticamente y ciegamente tome cambios de un repositorio a servidores de producción suena peligroso. ¿Qué pasa si su código comprometido contiene un error de regresión, por lo que su aplicación de producción se vuelve falsa?

Pero, si quieres un sistema de Integración Continua para PHP, supongo que Phing es la mejor opción para PHP. No lo he probado yo mismo, sin embargo, como hago las cosas de la manera manual de, por ejemplo, scp.



PHPTesting PHPCI Este es un buen servidor de integración continua integrado en php.

Además, es gratis y de código abierto. :)

tiene numero de plugins ..

PHPCI incluye complementos de integración para:

  • Atoum
  • Behat
  • Hoguera
  • Codecepción
  • Compositor
  • Email
  • Gruñido
  • IRC
  • PHP
  • Hilas
  • MySQL
  • PDepend
  • PostgreSQL
  • Código PHP Sniffer
  • Detector de copiar / pegar PHP
  • PHP Spec
  • Unidad de PHP
  • Comandos de Shell
  • Tar / Zip






php deployment capistrano