php - remove - strip_tags wordpress
Configuración de un ciclo de despliegue/construcción/CI para proyectos PHP (9)
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 realiza a pedido.
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 el código base, y crear un proceso de integración continua que haga posible la transición al trabajo en equipo sin tener que realizar cambios fundamentales.
Lo que estoy haciendo ahora mismo es que tengo 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 a partir del código fuente; Las pruebas de unidad son algo en lo que me estoy metiendo lentamente, y aún 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 revisa, se modifica si es necesario y se prepara para cargar.
La documentación de API se genera automáticamente, si aún no la he configurado en detalle, utilizando una plantilla predeterminada, escaneando todo el código base.
La nueva revisión se implementa en la ubicación remota a través de FTP (que incluye cambio de nombre de directorio, chmodding, importación de bases de datos y similares). Esto es algo que ya me gusta phing por phing , pero estoy abierto a alternativas por supuesto.
Se ejecutan las pruebas unitarias que residen en una ubicación predefinida. Me informan sobre su fracaso o éxito usando correo electrónico, RSS o (preferiblemente) salida HTML que puedo capturar y colocar en una página web.
(opcionalmente) un archivo de texto de "registro de cambios" del 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" barra "al mismo 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 las métricas de código, la comprobación de estilo de código, etc. no son mi enfoque principal en este momento, pero a largo plazo, ciertamente lo harán. Las soluciones que traen esto fuera de la caja son muy bien miradas.
Busco
Comentarios y experiencias de personas que están o estaban en una situación similar y han implementado exitosamente 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, mediante la creación de una API de 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 por lo que puedo ver, pero, por supuesto, no tengo experiencia detallada con ellos.
Estoy abrumado por el trabajo, por lo que tengo una fuerte inclinación hacia soluciones simples. Por otro lado, si falta una característica, lloraré por ser demasiado limitado. :) Las soluciones de apuntar y hacer clic también son bienvenidas. También estoy a las recomendaciones de productos comerciales que pueden trabajar con proyectos de 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 alojamiento compartido (= sin SSH remoto). Estoy buscando soluciones que pueda ejecutar en mi propio entorno. Estoy listo para configurar una VM de Linux para esto, no hay problema. Las soluciones alojadas son interesantes para mí solo si brindan todos los aspectos descritos o son lo suficientemente flexibles como para interactuar con las otras partes del proceso.
Bounty Estoy aceptando la respuesta que creo que me dará el mayor kilometraje. Hay muchos comentarios excelentes, me gustaría poder aceptar más de una respuesta. ¡Gracias a todos!
El término que busca 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 CI), puede usar Hosted SVN / GIT como fuente. Así que incluso puedes usarlo con GitHub o Beanstalk o algo más.
Luego puedes integrarlo con el siguiente tipo de software:
- PHPUnit
- php-codesniffer
- phpdocumentor
- PHP Gcov
- PHPXref
- Yasca
- etc.
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 has pensado en la gestión de proyectos y la gestión de parches?
Puedes usar Redmine para la gestión de proyectos. Cuenta con soporte integrado de integración continua, pero solo como parte del cliente (no como servidor CI).
Intente utilizar un SVN / GIT / etc alojado. Solución, ya que cubrirán sus copias de seguridad y mantendrán sus servidores en funcionamiento, para que pueda concentrarse en el desarrollo.
Para obtener un tutorial sobre cómo configurar Hudson, consulte: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
He estado en buildbot , CruiseControl.net , CruiseControl y Hudson . A pesar de que realmente me gustaba CruiseControl *, era demasiado complicado con los casos de dependencia realmente complejos. buildbot no es fácil de configurar, pero tiene un aura agradable (solo me gusta Python, eso es todo). Pero Hudson se ganó a los tres anteriores porque:
- Es fácil de configurar
- Es fácil de personalizar
- Se ve bien y tiene una buena funcionalidad de vista general
- Obtuvo actualizaciones de apuntar y hacer clic, para sí mismo y para todos los complementos instalados. Esta es una característica muy buena, que aprecio más y más
Advertencia: solo usé linux como base para los servidores de compilación mencionados anteriormente (CC.net se ejecutó en mono ), pero todos deberían, de acuerdo con los documentos, ejecutarse en varias plataformas.
Configurando un servidor hudson
Requisitos previos:
- Java (1.5 te servirá bien)
- Acceso de lectura al servidor de Subversion (tengo una cuenta separada para el usuario de hudson)
Desde aquí, es sólo:
java -jar hudson.war
Esto ejecutará una pequeña instancia de servidor directamente desde su consola, y debería poder navegar por la instalación en su http://localhost:8080
, si no tiene nada más ejecutándose en ese puerto de antemano (puede especificar otra puerto pasando la opción --httpPort=ANOTHER_HTTP_PORT
al comando anterior) y todo fue bien en el proceso de ''instalación''.
Si accede al directorio de complementos disponibles ( http://localhost:8080/pluginManager/available
), encontrará complementos para el soporte de las tareas mencionadas anteriormente (el soporte de subversion se instala por defecto).
Si eso le ha abierto el apetito, debe instalar un servidor de aplicaciones java, como tomcat o jetty . Las instrucciones de instalación están disponibles para todos los servidores de aplicaciones principales
Actualización : Kohsuke Kawaguchi ha construido un instalador de servicio de Windows para Hudson
Configurando un proyecto en hudson
Los enlaces en el siguiente tutorial suponen una instancia en ejecución de hudson ubicada en http://localhost:8080
- Seleccione nuevo trabajo (
http://localhost:8080/view/All/newJob
) en el menú de la izquierda - Asigne un nombre al trabajo y marque
Build a free-style software project
en la lista - Al presionar ''ok'' lo llevará a la página de configuración del trabajo. Todas las opciones tienen un pequeño signo de interrogación además de ellos. Al presionar esto aparecerá un texto de ayuda con respecto a la opción.
- Bajo el grupo de opciones ''Administración del código fuente'', estaría usando Subversion. Hudson acepta tanto el acceso a url como el acceso al módulo local
- Bajo el grupo de opción ''Crear desencadenadores'', usaría ''Encuesta SCM''. La sintaxis utilizada aquí es la de cron, por lo que sondear el repositorio de subversion cada 5 minutos sería
*/5 * * * *
- El proceso de creación del proyecto se especifica en el grupo de opciones ''Crear''. Si ya tienes un archivo de compilación con todos los objetivos que necesitas, estás de suerte. Simplemente elige ''Invoke ant'' y escribe el nombre del objetivo. El grupo de opciones admite comandos de shell y maven fuera de la caja, pero también hay un complemento disponible para phing .
- Marque las acciones de compilación adicionales en ''Acciones de compilación posteriores'', como las notificaciones por correo electrónico o el archivo de artefactos de compilación.
Para configurar procesos para los cuales hudson no tiene complementos, puede llamarlos directamente a través de un script de shell desde la configuración de compilación o puede escribir su propio complemento.
Escollos:
- Si lo tiene, produzca artefactos de construcción, recuerde que hudson se limpie a intervalos regulares.
- Si tiene más de 20 proyectos configurados, considere no mostrar su estado de compilación como la página principal predeterminada en hudson
¡Buena suerte!
No utilizo 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 integrarse en un entorno TEST real, entonces arreglo mi proceso de compilación. No veo el punto en las pruebas locales, ya que los entornos son diferentes. ACTUALIZACIÓN: Lo único que hago localmente es ejecutar "php -l" antes de cargar nada. Detiene los errores estúpidos.
El proceso de compilación funciona con lo que sea que esté en el espacio de trabajo actual, que incluye código no confirmado. Esta no es una taza de té para todos, pero voy a PROBAR 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 de lista de cambios actual. 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 compilo directamente al entorno de destino, sino a un área de almacenamiento 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 mitad de camino a través 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). La secuencia de comandos 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 elimina todos los demonios (uso daemontools, así que "svc -t"). Todos estos están mejor en la máquina de destino.
Otro problema son los cambios en la base de datos. Guardo una secuencia de comandos maestra del esquema de base de datos, que actualizo cada vez que el esquema cambia. Cada uno de los cambios también se incluye en un script changes.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.
Recientemente he comenzado el mismo tipo de proceso y estoy usando Beanstalk para el alojamiento svn.
Hay dos características ingeniosas en las cuentas pagas (a partir de $ 15 pm, creo):
- la implementación permite al usuario crear destinos ftp para servidores de producción y de almacenamiento intermedio, que se pueden implementar con solo hacer clic en un botón (incluyendo una revisión y una rama)
- los webhooks permiten al usuario configurar una url que se llama en cada confirmación / despliegue, pasando a través de cosas como número de revisión, descripción y usuario. Esto podría usarse para actualizar documentos, ejecutar pruebas unitarias y actualizar registros de cambios.
Estoy seguro de que hay otros servidores svn alojados o de hospedaje automático 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 que podría usarse para integrar la implementación en su proceso.
Soy sobre todo 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 usando Jenkins. También ejecuta un proyecto de ejemplo para que pueda ver cómo se configura cada paso de compilación.
Si desea probarlo, todo lo que necesita es una caja 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 algo de contenido a mi respuesta:
Simplemente puede configurar un CI Jenkins para PHP usando Ansible. Desde v1.4 admite funciones que puede descargar desde su sitio de la comunidad galaxy.ansibleworks.com y hará el trabajo pesado por usted. Se llama jenkins-php .
Sugeriría que usar Jenkins http://jenkins-ci.org/ es gratis y es 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 utilizar 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.
Ya que estás trabajando principalmente con el proyecto PHP, hay otras herramientas que puedes usar.
PHPUnit - Para pruebas unitarias
PHP CodeSniffer - Compruebe los estándares de codificación
Dependencia de PHP - Muestra sus dependencias de código PHP
XDEBUG - Para pruebas de rendimiento
Todas estas herramientas se activan con un trabajo de Jenkins y ayudan con la calidad y el rendimiento de su código.
Buena suerte y disfruta!
Utilizo el servidor de integración continua Bamboo de Atlassian para mi proyecto principal de PHP (junto con sus otros productos como fisheye (búsqueda de repositorio), jira (rastreador de problemas) y clover (cobertura de códigos)).
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 las que no les gusta tomar días para configurar sus herramientas). Aunque parezca caro, yo mismo, como desarrollador solitario, compré la licencia del kit de inicio por 10 $ (10 $ por software). Esto es genial para equipos pequeños y vale la pena el aspecto.
PHPTesting PHPCI Este es un buen servidor de integración continua integrado en php.
Además, es gratis y de código abierto. :)
tiene numero de plugins ..
PHPCI incluye complementos de integración para:
- Atoum
- Behat
- Hoguera
- Codecepción
- Compositor
- Gruñido
- IRC
- PHP
- Hilas
- MySQL
- PDepend
- PostgreSQL
- Código PHP Sniffer
- Detector de copiar / pegar PHP
- PHP Spec
- Unidad de PHP
- Comandos de Shell
- Tar / Zip