172 votos

Configurar una implementación / build / CI ciclo para proyectos PHP

Yo soy un solitario desarrollador de la mayor parte de mi tiempo, trabajando en un gran número de grandes, principalmente en PHP basado en proyectos. Quiero profesionalizar y automatizar los cambios de la base de código que se manejan, y crear un proceso de Integración Continua que se hace la transición de trabajar en equipo posible sin tener que hacer cambios fundamentales.

Lo que estoy haciendo ahora es, tengo un entorno de prueba local para cada proyecto; uso de SVN para cada proyecto; los cambios son probados a nivel local, y luego se transfieren a la versión on-line, generalmente a través de FTP. La documentación de la API se genera manualmente desde el código fuente, las pruebas unitarias son algo que me estoy metiendo lentamente, y que todavía no forma parte de mi rutina diaria.

La "construcción del ciclo" estoy imaginando hacer lo siguiente:

  • Un conjunto de cambios se comprueba en SVN después de haber sido probado a nivel local.

  • Yo inicie el proceso de compilación. El SVN de la HEAD de la revisión se comprueba, modificar, si es necesario, y listo para la carga.

  • La Documentación de la API se genera de forma automática - si no he configurar en detalle aún, con una plantilla por defecto, el escaneado de la totalidad de la base de código.

  • La nueva revisión es desplegado a la ubicación remota a través de FTP (Incluyendo algunos directorio de cambiar el nombre, chmodding, importación de bases de datos, y la talla.) Esto es algo que me gusta ya phing para mucho, pero estoy abierto a alternativas de curso.

  • La unidad de pruebas que residen en un sitio predefinido. Estoy informado acerca de su éxito o fracaso a través de E-Mail, RSS o (preferiblemente) salida HTML que me puede asir y poner en una página web.

  • (opcionalmente) un usuario final "changelog" archivo de texto en un pre-definidos ubicación se actualiza con una pre-definidos parte del mensaje de confirmación ("ahora es posible filtrar por tanto "foo" y "bar" al mismo tiempo). Este mensaje no es necesariamente idéntica a la SVN commit mensaje, que probablemente contiene mucho más información interna.

  • Cosas como el código de la métrica, el estilo de código de comprobación y así sucesivamente, no son mi principal prioridad ahora mismo, pero en el largo plazo, que será, sin duda. Soluciones que llevar a cabo-de-la-caja son muy amablemente miró.

Estoy buscando

  • Comentarios y experiencias de las personas que están o estuvieron en una situación similar, y han implementado con éxito una solución para este

  • Sobre todo, buen paso por paso tutoriales y tutoriales sobre cómo configurar esto

  • Las soluciones que proporcionan tanto la automatización como sea posible, por ejemplo mediante la creación de un esqueleto de la API, casos de prueba y así sucesivamente para cada nuevo proyecto.

y también

  • Recomendaciones de productos. Lo que sabemos hasta ahora es phing/ant para la construcción, y phpUnderControl o Hudson por la denuncia de parte. Me gustan todos como lo que yo puedo ver, pero tengo claro que no detallado experiencia con ellos.

Estoy inundado con el trabajo, así que tengo una fuerte inclinación hacia las soluciones simples. Por otro lado, si una característica es que faltan, me voy a llorar acerca de que sea demasiado limitado. :) El punto y haga clic en soluciones son bienvenidos. Yo también soy comercial, recomendaciones de productos que pueden trabajar con PHP proyectos.

Mi configuración

Estoy trabajando en Windows localmente (7 para ser exactos) y la mayoría de los proyectos de cliente se ejecuta en una LÁMPARA de pila, a menudo en alojamiento compartido (= no remoto SSH). Estoy buscando soluciones que puedo correr en mi propio entorno. Estoy listo para configurar un Linux VM para esto, no hay problema. Soluciones de hospedaje son interesantes para mí, sólo si se proporcionan todos los aspectos descritos, o son lo suficientemente flexibles para interactuar con las demás partes del proceso.

Recompensa Estoy de aceptar la respuesta que me siento que me va a dar la mayoría de kilometraje. Hay un montón de excelentes entrada aquí, me gustaría poder aceptar más de una respuesta. Gracias a todos!

66voto

Steen Puntos 3427

He estado a través de buildbot, CruiseControl.net, CruiseControl , y de Hudson. Todos, aunque me gustó mucho CruiseControl*, era demasiado de un molestia con muy complejos casos de dependencia. buildbot no es fácil de establecer, pero tiene un aura agradable (me gusta python, que es todo). Pero hudson se impuso sobre el ex tres porque:

  1. Es simplemente fácil de configurar
  2. Es fácil personalizar
  3. Se ve bien y tiene buena visión general de la funcionalidad de
  4. Se puso punto y haga clic en actualizaciones, para sí mismo y todos los plugins instalados. Este es un muy buena característica, que aprecio más y más

Advertencia: yo sólo he usado nunca linux como base para los mencionados servidores de compilación (CC.net corrió en mono), pero todos ellos deberían - según los médicos - ejecutar la multiplataforma.

Configuración de un servidor de hudson

Requisitos:

  • Java (1.5 le servirá muy bien)
  • Acceso de lectura al servidor de subversion (tengo una cuenta separada para el hudson usuario)

A partir de aquí, sólo que:

java -jar hudson.war

Esto ejecutará un pequeño instancia del servidor de la derecha de la consola, y usted debería ser capaz de navegar por la instalación en tu http://localhost:8080, si no tengo otra cosa que funcione en el puerto de antelación (se puede especificar otro puerto, pasando de los --httpPort=ANOTHER_HTTP_PORT opción para el comando de arriba) y todo ha ido bien en la " instalación " en el proceso.

Si vas al directorio de plugins (http://localhost:8080/pluginManager/available), encontrarás plugins para apoyar sus tareas mencionadas (compatibilidad con subversion está instalado por defecto).

Si que tiene ir abriendo el apetito, debe instalar un servidor de aplicaciones java, tales como tomcat o jetty. Instrucciones de instalación están disponibles para todos los principales servidores de aplicaciones

Actualización: Kohsuke Kawaguchi ha construido un servicio de windows installer para hudson

Configuración de un proyecto en hudson

Los enlaces de la siguiente paseo a través supone una instancia de ejecución de hudson, ubicado en http://localhost:8080

  1. Seleccione nuevo puesto de Trabajo (http://localhost:8080/view/All/newJob) desde el menú de la izquierda
  2. Da el trabajo de un nombre y garrapatas Build a free-style software project sobre la lista
  3. Pulsando " aceptar", se le llevará a la página de configuración de la tarea. Todas las opciones tienen un pequeño signo de interrogación además de ellos. Presionando de este modo, aparecerá un texto de ayuda sobre la opción.
  4. Bajo la opción de grupo de Gestión de Código Fuente' se va a utilizar Subversion. Hudson acepta tanto la dirección url de acceso, así como locales de acceso del módulo
  5. Bajo el grupo de la opción de 'Crear Triggers', que haría uso de la 'Encuesta de SCM'. La sintaxis que se utiliza aquí es el de cron, para sondear el repositorio de subversion cada 5 minutos serían */5 * * * *
  6. El proceso de construcción del proyecto se especifica en la opción grupo de 'Construir'. Si ya tienes una hormiga construir archivo con todos los destinos que usted necesita, usted está en suerte. Simplemente elige 'Invocar hormiga' y escribe el nombre del destino. La opción de grupo apoya maven y comandos de la shell como fuera de la caja, pero también hay un plugin disponible para phing.
  7. Marque adicional de generar acciones en Post de Construir Acciones", tales como notificaciones de correo electrónico o un archivo de construir artefactos.

Para el establecimiento de procesos para el que hudson no tienen plugins, usted puede llamar directamente a través de un script de shell desde dentro de la construcción de la instalación, o usted podría escribir de propia plugin

Trampas:

  • Si usted tiene que producir, construir artefactos, recuerde tener hudson limpiar después de sí mismo en intervalos regulares.
  • Si usted tiene más de 20 proyectos, considere la posibilidad de no mostrar su estado de generación como la predeterminada de la página principal de hudson

Buena suerte!

19voto

Michiel Puntos 441

El término que usted busca es: continua la integración.

Aquí hay un ejemplo de alguien que usa GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl (que es un servidor CI), puede utilizar Alojado SVN/GIT como fuente. Así que usted puede utilizar incluso con GitHub o Beanstalk o algo más.

A continuación, puede integrar con el siguiente tipo de software:

  • PHPUnit
  • php codesniffer
  • phpdocumentor
  • PHP Gcov
  • PHPXref
  • Yasca
  • etc.

Bien se podría tratar esta alojado CI: http://www.php-ci.net/hosting/create-project

Tenga en cuenta, sin embargo, que esas herramientas necesidad de soporte personalizado, si usted integrarlos a ti mismo.

¿También pensaba acerca de la gestión de proyectos y la gestión de parches?

Usted puede utilizar Redmine la gestión de proyectos. Se ha integrado la integración continua de apoyo, pero sólo del lado del cliente como (no como servidor CI).

Pruebe a utilizar una alojado SVN/GIT/etc. la solución, porque van a cubrir sus copias de seguridad y mantener a sus servidores que ejecutan, de modo que usted pueda centrarse en el desarrollo.

Para un tutorial sobre cómo configurar Hudson, ver: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

5voto

Steven Rosato Puntos 1110

Yo uso Atlassian del Bambú continua integration server para que mi principal proyecto de PHP (junto con sus otros productos, tales como ojo de pez (repositorio de navegación), jira (bug tracker) y el trébol (cobertura de código)).

Es compatible con SVN y ahora soporta Git y cuenta con una gran interfaz de usuario. Está disponible para linux, windows y mac, y puede ejecutarse por separado en su propio servidor tomcat, que es ideal para personas (como yo) que no le gusta tomar días para la instalación de sus herramientas). Aunque pueda parecer caro, de ser un solitario desarrollador mí mismo he comprado el kit de iniciación de la licencia por 10$ (10$ por software). Esto es ideal para pequeños equipos y vale la pena mirar.

2voto

Phil Wallach Puntos 2478

Yo también soy un solitario desarrollador, aunque yo no tenga el mismo entorno.

Yo no uso muchos de los productos, o incluso los tipos de productos que se utilizan, pero os voy a dar mi experiencia.

Puedo ejecutar un entorno de PRUEBA en paralelo con mi entorno PROD. No tengo pruebas locales de por sí. Si es demasiado duro para conseguir soemthing en un verdadero entorno de PRUEBA, entonces puedo solucionar mi proceso de compilación. No veo el punto en pruebas a nivel local, como los entornos son diferentes. ACTUALIZACIÓN: La única cosa que voy a hacer a nivel local es ejecutar "php-l" antes de subir nada. Las paradas de los errores estúpidos.

El proceso de construcción de las obras con lo que está en el espacio de trabajo actual, que incluye no confirmadas código. Esto no es de todos taza de té, pero yo voy a PROBAR muy a menudo. Todo lo que se ha comprometido antes de ir a la PROD.

Parte de mi proceso de compilación (similar a la suya) crea dos archivos de METADATOS. Uno contiene la última (por lo general) de 100 cambios y también me da la actual changelist número. El me muestra qué cambios se han instalado. El otro contiene la CLIENTSPEC (en Perforce términos) que me muestra exactamente lo que las ramas se utilizan en esta generación. Juntos, estos me dan compilaciones reproducibles.

Yo no construir directamente en el entorno de destino, pero a un área de ensayo en el servidor. Puedo usar SSH para que esto tenga sentido. Esto me da algunas ventajas. Lo más importante es que evita morir a mitad de camino a través de una gran carga. También me da un lugar para almacenar archivos de METADATOS, y todos los archivos de construcción se archivan automáticamente (por lo que puede volver a cualquier versión). La secuencia de comandos también los registros de la actualización (por lo que hay una entrada en la secuencia de registro y puedo ver el pre - y post-) y patadas a todos los demonios (yo uso daemontools para "svc-t"). Todos estos están mejor en el equipo de destino.

Otra cuestión es DB cambios. Tengo un master de guión de la base de datos de esquema, que puedo actualizar cada vez que cambia el esquema. Cada uno de los cambios también van en un changes.sql script, el cual es cargado con la construcción para el área de ensayo. La secuencia de comandos se ejecuta como parte de la secuencia de comandos de instalación.

1voto

yegor256 Puntos 21737

Consideran fazend.com, una plataforma gratuita de CI alojada, que automatiza los procedimientos de instalación y configuración. No tienes que configurar el control de versiones, bug tracking, CI server, entorno de prueba, etc.. Todo se hace bajo demanda.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X