tag name php deployment capistrano

php - get tag name wordpress



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

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

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.


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.


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.


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.


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.


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.


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.


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.


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.


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



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.