Soy un desarrollador solitario la mayor parte de mi tiempo, trabajando en varios proyectos grandes, principalmente basados en PHP. Quiero profesionalizar y automatizar la forma en que se manejan los cambios en la base del código, y crear un proceso de integración continua que haga posible la transición al trabajo en equipo sin tener que hacer cambios fundamentales.
Lo que estoy haciendo ahora es tener un entorno de prueba local para cada proyecto; Yo uso SVN para cada proyecto; los cambios se prueban localmente y luego se transfieren a la versión en línea, 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 en lo que me estoy metiendo lentamente, y todavía no es parte de mi rutina diaria.
El "ciclo de construcción" que estoy imaginando haría lo siguiente:
Un conjunto de cambios se registra en SVN después de haber sido probado localmente.
Comienzo el proceso de construcción. La revisión de SVN HEAD se desprotege, se modifica si es necesario y se prepara para cargar.
La documentación de API se genera automáticamente; si aún no la configuré en detalle, utilizando una plantilla predeterminada, escaneando toda la base de código.
La nueva revisión se implementa en la ubicación remota a través de FTP (incluyendo algunos cambios de nombre de directorio, modificación de chmodding, importación de bases de datos y similares). Esto es algo por lo que ya me gusta mucho el phing , pero estoy abierto a alternativas, por supuesto.
Se ejecutan pruebas unitarias que residen en una ubicación predefinida. Me informan sobre su fracaso o éxito al utilizar el correo electrónico, RSS o (preferiblemente) la salida HTML que puedo obtener y poner en una página web.
(opcionalmente) un archivo de texto "changelog" de usuario final en una ubicación predefinida se actualiza con una parte predefinida del mensaje de confirmación ("Ahora es posible filtrar tanto" foo "como" bar "al mismo tiempo) tiempo). Este mensaje no es necesariamente idéntico al mensaje de confirmación SVN, que probablemente contiene mucha más información interna.
Cosas como métricas de código, verificación de estilo de código, etc., no son mi enfoque principal en este momento, pero a largo plazo, ciertamente lo serán. Las soluciones que traen esto de forma inmediata son muy amables.
Busco
Comentarios y experiencias de personas que están o estuvieron en una situación similar, y han implementado con éxito una solución para esto
Especialmente, buenos tutoriales paso a paso y tutoriales sobre cómo configurar esto
Soluciones que proporcionan la mayor automatización posible , por ejemplo, creando una API esqueleto, casos de prueba, etc. para cada nuevo proyecto.
y también
- Recomendaciones de productos . Lo que sé hasta ahora es phing / ant para la construcción, y phpUnderControl o Hudson para la parte de informes. Me gustan todos hasta donde puedo ver, pero por supuesto no tengo experiencia detallada con ellos.
Estoy lleno de trabajo, por lo que tengo una fuerte inclinación hacia soluciones simples. Por otro lado, si falta una característica, lloraré por que sea demasiado limitada. :) Las soluciones de apuntar y hacer clic también son bienvenidas. También estoy a favor de las recomendaciones de productos comerciales que pueden funcionar con proyectos PHP.
Mi configuración
Estoy trabajando en Windows localmente (7, para ser exactos) y la mayoría de los proyectos de clientes se ejecutan en una pila LAMP, a menudo en un alojamiento compartido (= sin SSH remoto). Estoy buscando soluciones que pueda ejecutar en mi propio entorno. Estoy listo para configurar una máquina virtual Linux para esto, no hay problema. Las soluciones alojadas son interesantes para mí solo si proporcionan todos los aspectos descritos o si son lo suficientemente flexibles como para interactuar con las otras partes del proceso.
Recompensa Estoy aceptando la respuesta que siento me dará la mayor cantidad de millas. Aquí hay muchos comentarios excelentes, desearía poder aceptar más de una respuesta. ¡Gracias a todos!
El término que está buscando es "integración continua".
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 de CI) puede usar SVN / GIT alojado como fuente. Así que incluso puedes usarlo con GitHub o Beanstalk u otra cosa.
Luego puede integrar eso con el siguiente tipo de software:
También puede probar este CI alojado: http://www.php-ci.net/hosting/create-project
Sin embargo, tenga en cuenta que esas herramientas necesitan soporte personalizado si las integra usted mismo.
¿También ha pensado en la gestión de proyectos y la gestión de parches?
Puede usar Redmine para la gestión de proyectos. Tiene soporte integrado de integración continua, pero solo como cliente (no como servidor CI).
Intente usar un SVN / GIT / etc alojado. solución, porque cubrirán sus copias de seguridad y mantendrán sus servidores en funcionamiento, para que pueda concentrarse en el desarrollo.
Para ver un tutorial sobre cómo configurar Hudson, consulte: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
fuente
Utilizo el servidor de integración continua Bamboo de Atlassian para mi proyecto PHP principal (junto con sus otros productos como fisheye (navegación de repositorio), jira (rastreador de problemas) y trébol (cobertura de código)).
Es compatible con SVN y ahora es compatible con Git y tiene una excelente interfaz de usuario. Está disponible para Linux, Windows y Mac y puede ejecutarse de forma independiente en su propio servidor Tomcat, lo cual es ideal para personas (como yo) a quienes no les gusta tomarse días para configurar sus herramientas). Aunque puede parecer costoso, siendo un desarrollador solitario, compré la licencia del kit de inicio por 10 $ (10 $ por software). Esto es ideal para equipos pequeños y vale la pena verlo.
fuente
PHPTesting PHPCI Este es un buen servidor de integración continua integrado en php.
Además, es de código libre y abierto. :)
tiene varios complementos ...
PHPCI incluye complementos de integración para:
fuente
Soy principalmente un administrador de sistemas, pero a veces también codifico PHP. Como proyecto paralelo, creé algunos scripts que harán que sea sencillo e indoloro configurar un entorno PHP CI completo utilizando Jenkins. También ejecuta un proyecto de muestra para que pueda ver cómo se configura cada paso de compilación.
Si quieres probarlo, todo lo que necesitas es un cuadro de Debian / Ubuntu y acceso a shell.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Actualizar Para agregar contenido a mi respuesta:
Simplemente puede configurar un Jenkins CI para PHP usando Ansible. Desde la v1.4, admite roles que puede descargar desde el sitio de la comunidad galaxy.ansibleworks.com y hará el trabajo pesado por usted. Se llama jenkins-php .
fuente
Sugeriría usar Jenkins http://jenkins-ci.org/ es gratis y de código abierto.
Es bastante sencillo de configurar, funciona en múltiples plataformas y se integra bien con otras herramientas de integración continua como SonarQube (+ SQUALE) para medir la deuda técnica y Thucydides para probar la automatización.
Recomiendo encarecidamente usar GIT o GIT Hub para el control de versiones en lugar de SVN. Desde mi punto de vista, es solo un mejor sistema de control de versiones que lo ayudará a escalar sus esfuerzos de desarrollo más adelante.
Como está trabajando principalmente con proyectos PHP, existen otras herramientas que puede usar.
PHPUnit - Para pruebas unitarias
PHP CodeSniffer - Verifique los estándares de codificación
Depende de PHP: muestra sus dependencias de código PHP
XDEBUG: para pruebas de rendimiento
Todas estas herramientas se activarán con un trabajo de Jenkins y ayudarán con la calidad y el rendimiento de su código.
Buena suerte y disfruta!
fuente
No uso muchos de los productos, ni siquiera los tipos de productos que usa, pero le daré mi experiencia.
Ejecuto un entorno TEST en paralelo con mi entorno PROD. No tengo pruebas locales per se. Si es demasiado difícil llevar algo a un entorno de PRUEBA real, entonces arreglo mi proceso de compilación. No veo el punto de probar localmente, ya que los entornos son diferentes. ACTUALIZACIÓN: Lo único que hago localmente es ejecutar "php -l" antes de cargar cualquier cosa. Detiene los estúpidos errores.
El proceso de compilación funciona con lo que esté en el espacio de trabajo actual, que incluye código no confirmado. Esta no es la taza de té de todos, pero voy a hacer PRUEBAS muy a menudo. Todo se compromete antes de ir a PROD.
Parte de mi proceso de compilación (similar al tuyo) crea dos archivos META. Uno contiene los últimos (típicamente) 100 cambios y también me da el número actual de la lista de cambios. El me muestra qué cambios están instalados. El otro contiene el CLIENTSPEC (en términos de Perforce) que me muestra exactamente qué ramas se usaron en esta compilación. Juntos, estos me dan construcciones reproducibles.
No construyo directamente al entorno de destino, sino a un área de preparación en el servidor. Yo uso SSH, así que esto tiene sentido. Esto me da algunas ventajas. Lo más importante es que evita morir a la mitad de una carga grande. También me da un lugar para almacenar archivos META, y todos los archivos de compilación se archivan automáticamente (para que pueda volver directamente a cualquier compilación). El script también registra la actualización (por lo que hay una entrada en la secuencia de registro y puedo ver antes y después) y patea todos los demonios (uso daemontools para "svc -t"). Todos estos están mejor en la máquina de destino.
Otro problema son los cambios en la base de datos. Mantengo un script maestro del esquema de base de datos, que actualizo cada vez que cambia el esquema. Cada uno de los cambios también entra en un script de cambios.sql, que se carga con la compilación en el área de preparación. El script se ejecuta como parte del script de instalación.
fuente
Recientemente comencé el mismo tipo de proceso, y estoy usando Beanstalk para svn hosting.
Hay dos funciones ingeniosas en las cuentas pagas (creo que comienzan en $ 15pm):
Estoy seguro de que hay otros servidores svn alojados o autohospedados con estas dos características, pero beanstalk es el que tengo experiencia y está funcionando muy, muy bien
También hay una API, que imagino podría usarse para integrar aún más la implementación en su proceso.
fuente
Considere fazend.com , una plataforma de CI alojada gratuita, que automatiza los procedimientos de configuración e instalación. No es necesario configurar el control de versiones, el seguimiento de errores, el servidor CI, el entorno de prueba, etc. Todo se hace a pedido.
fuente