2010-04-09 7 views
17

No pude encontrar la solución para la implementación de Php en el servidor remoto utilizando FTP desde SVN después de cada confirmación. ¿Cómo puedo cargar en el servidor por FTP los únicos archivos añadidos o editados y eliminar los archivos eliminados del SVN Creo que escribir script de post-commit ...Despliegue de Php al servidor remoto utilizando FTP desde SVN después de cada confirmación

+2

Los enganches de script post-commit son correctos, pero no debe usar FTP sino rsync para transferir a los nuevos hosts. FTP no puede determinar qué fue editado y qué no. Checkout Phing, como sugirió Pekka y esta publicación en el blog: http://blog.fedecarg.com/2008/07/21/filesynctask-using-phing-to-synchronize-files-and-directories/ – Gordon

+1

Si puede, considere usar SVN en tu servidor remoto también. Déle acceso restringido de solo lectura e instale un enganche post-commit en el repositorio que notifica al servidor remoto que primero revertirá y luego actualizará su copia de trabajo. En este caso, es posible que también desee denegar el acceso web a cualquier carpeta '.svn'. Además, considere usar ramas para asegurarse de que el servidor no revisa cada confirmación desde el enlace troncal. – Archimedix

+0

No creo que la solución deba estar basada en PHP, solo para la transferencia de un sitio web php. –

Respuesta

13

¡Buena pregunta!

No estoy seguro de un enfoque solo PHP para sincronizar archivos de esa manera.

Normalmente usaría herramientas de sincronización de FTP de terceros como rsync o ScriptFTP (comercial) para hacer la parte de sincronización.

Eche un vistazo a phing, hay una serie de extensiones de FTP (llamadas "tareas") para ello. Aunque no tengo una experiencia del mundo real con ellos.

Este blog ofrece una serie de ideas y enfoques: Using phing to sync files with shared hosting

+0

No utilizo Phing sino Ant, y el resultado es que solo puedo copiar todas las fuentes nuevas desde SVN al servidor remoto. No solo sincronice los archivos de la nueva confirmación. Los servidores remotos pueden ser del sistema operativo Windows, por lo que no puedo usar rsync. Solo quiero simular el proceso de implementación de Springloops.com Son perfectos para eso. – user312729

6

Usted podría utilizar svn2web para cargar todos los archivos comprometida a un servidor a través de FTP. Svn2web es una colección de scripts php que puedes usar como ganchos svn. Puede establecer la dirección, el nombre de usuario y la contraseña del servidor ftp como una propiedad svn en un directorio. ¡Funciona genial!

+0

Gracias por sus respuestas. Pero la confirmación puede eliminar algunos archivos en svn. Y necesito sincronizar el svn con el servidor de implementación. – user312729

+0

si elimina archivos en su repositorio, svn2web eliminará aquellos en el ftp también. ¿No es eso algo bueno? – murze

0

La mejor manera (si su servidor es basado en Linux) para hacer una exportación SVN a un nuevo directorio y luego mover el nuevo directorio para reemplazar el anterior (la mejor forma de hacerlo es con enlaces simbólicos a diferentes versiones de el sitio). De esta forma, el sitio no estará disponible durante uno o dos segundos, mientras que si sincronizas y tienes un sitio grande, si cambias drásticamente un solo archivo, el sitio se romperá hasta que todos los archivos se sincronicen.

En cuanto a la ejecución de este procedimiento, la mejor manera es usar los ganchos svn. También considere realizar algunas pruebas automáticas antes de la liberación (para la funcionalidad básica), porque puede romper el tronco bastante mal en algún momento y el sitio definitivamente estaría abajo :)

Actualmente estamos incorporando el enfoque descrito anteriormente en una producción medio ambiente y la configuración es la siguiente:

  • Una confirmación va en el maletero
    • antes de que sea realmente comprometida, las pruebas se corrieron en el código para ver si todo funciona
  • Después de varias comete un despliegue viene (por lo general desarrollador supervisado)
    • Las pruebas se ejecutan de nuevo
    • Si tienen éxito - todo muy bien
    • Si fallan, edad de exportación se devuelve y el sitio está en pleno funcionamiento una vez nuevo

todo está escrito en PHP, mediante el uso de comandos de la consola del standart.

+0

No deseo exportar todos los archivos en una nueva versión en svn a la carpeta de implementación remota. Solo quiero sincronizar cargando nuevos archivos, sobrescribiendo archivos editados y también borrando archivos de acuerdo con la confirmación. por favor, muéstreme un ejemplo – user312729

+3

Bueno, entonces, ¿por qué no hace que su sitio web de producción sea un svn checkout y simplemente lo actualiza cuando se compromete? También debe prohibir el acceso a las carpetas .svn y funcionará exactamente como lo desee. Y si el repositorio SVN está en el mismo servidor que el sitio web, es simple como hacer que/path/to_svn/repos/someproject/hooks/post-commit se vea como: #!/Bin/bash svn update/path/to/sitio web y hacerlo ejecutable. – bisko

3

Uso http://svn2ftp.com que es un host SVN que permite implementaciones remotas en S/FTP en cada confirmación.

3

Si no desea administrar los scripts por su cuenta, pero solo quiere algo que funcione, podría intentar usar un servicio alojado. Yo uso Deploy, que funciona perfectamente para el escenario que describes. Y si solo tiene un proyecto para implementar, es incluso gratuito.

1

¿Has mirado en Beanstalk? Le permite implementar sus proyectos de Subversion y Git en su servidor FTP con un solo clic. No es gratis sin embargo. Otra alternativa gratuita sería configurar un servidor de integración continua que ejecute un script de rake para realizar sus implementaciones.

2

Para nuestro proyecto php usamos Jenkins una herramienta de integración continua. Nuestro servidor de repositorio es subversión. Cada vez que hacemos cambios en el código, usamos trabajos jenkins para fusionarnos con el entorno en vivo de Beta staging & y luego implementamos la aplicación.

Puede encontrar más información sobre la implementación de aplicaciones PHP usando Jenkins en http://www.michaelpeacock.co.uk/blog/entry/jenkins-ci-an-introduction-for-php-developers

+1

Me gusta tu respuesta, así tienes mi recompensa. –

+0

Gracias Mark .... :) –

1

¿Qué dice usted, usted la comprobación de SVN para you'r servidor, (crear copia de trabajo desde el SVN para el servidor de producción), y cuando quiera implementar una nueva versión, simplemente se conecta al servidor a través de SSH y escribe svn update, y allí está, solo se implementarán los archivos más recientes que se han editado, y en menos de un segundo usted tendrá la última versión actualizada en producción.

Cuestiones relacionadas