php - name - get tags wordpress




¿Cuál es su estrategia preferida de implementación de php? (10)

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.


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).


En mi trabajo, mi equipo y yo hemos desarrollado un reemplazo orientado a Phing para el despliegue de Capistrano y también hemos incorporado algunos de los productos disponibles en phishing como PHPUnit testing, phpcs y PHPDocumentor. Lo hemos hecho un repositorio git que se puede agregar a un proyecto como un submódulo en git y funciona muy bien. Lo he adjuntado a un puñado de proyectos y es lo suficientemente modular como para que sea fácil hacerlo funcionar con cualquier proyecto en cualquiera de nuestros diversos entornos (montaje, prueba, producción, etc.).

Con los scripts de construcción de phing puedes ejecutarlos desde la línea de comandos de forma manual, y también tuve éxito al automatizar las rutinas de compilación / implementación con Hudson y ahora con Jenkins ci.

No puedo publicar ningún enlace ahora porque el repositorio aún no es público, pero me dijeron que vamos a abrir el código fuente a veces, así que no dude en ponerse en contacto conmigo si está interesado o si tiene cualquier pregunta sobre la automatización de su implementación con phing y git.


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.


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.

Supongo que el despliegue de SVN no es muy bueno. Porque:

Debes abrir el acceso SVN para todo el mundo

tener muchos .svn en los servidores web de producción

Creo que Phing para producir una rama + combinar todos los js / css + reemplazar la etapa de configuración + subida de ssh a todos los servidores de www es mejor manera.

ssh to 10 www server y svn up también son un problema.


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.


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.


una alternativa a las secuencias de comandos de implementación caseras es implementarla en una plataforma como servicio que elimina gran parte de ese trabajo para usted. Un PaaS generalmente ofrecerá su propia herramienta de implementación de código, así como escalamiento, tolerancia a fallas (por ejemplo, no baja cuando falle el hardware) y, por lo general, un gran conjunto de herramientas para supervisar, verificar logs, etc. También existe la ventaja de implementarlo en un buena configuración conocida que se mantendrá actualizada a lo largo del tiempo (un dolor de cabeza menos para usted).

El PaaS que recomendaría es dotCloud , además de PHP ( ver su inicio rápido PHP ) también puede implementar MySQL, MongoDB y un montón de servicios adicionales. También tiene cosas buenas como despliegue de tiempo de inactividad cero, reversión instantánea, soporte completo para SSL y websocket, etc. Y hay un nivel gratuito que siempre es agradable :)

¡Por supuesto que soy un poco parcial ya que trabajo allí! Otras opciones que vale la pena visitar además de dotCloud son Pagodabox y Orchestra (ahora parte de Engine Yard).

¡Espero que esto ayude!

Solomon






capistrano