usar deploy como php deployment jenkins continuous-integration build-automation

deploy - continuous integration php



Despliegue automatizado de PHP en entorno CI(Jenkins) (2)

Actualmente estoy buscando la configuración de un entorno de implementación y CI sólido para un proyecto compartido entre un pequeño equipo de desarrolladores. El objetivo es brindar cierta consistencia en la forma en que se prueban las cosas, en la calidad general del código y en la forma en que se realizan las implementaciones.

He leído sobre Jenkins, Sonar, Maven, Capistrano, Phing, ANT, ... y, para ser sincero, me estoy perdiendo en medio de todas esas herramientas / tecnologías y me gustaría que validara mi comprensión y diera Me da una idea de la mejor manera de lograr esto.

Lo que ya he configurado hasta ahora:

  • Git : utilizamos git como sistema de control de versiones y tenemos un "desarrollo" de rama para todos los nuevos desarrolladores que necesitan ser analizados por la herramienta CI.
  • Jenkins : Jenkins se activa con un gancho GIT (en la rama de desarrollo) y ejecutará un script PHING realizando las siguientes acciones:

    • Pelusa: validar ejecución de código PHP, analizador de código
    • PHPLoc: obtenga algunas estadísticas sobre el código PHP (complejidad, dependencia ...)
    • PDepend: análisis de código (no estoy seguro de la diferencia con PHPLoc)
    • phpmd: detector de desorden (parámetros no utilizados, código complicado ...)
    • phpcpd: detectar copiar pegar código
    • PHPcs: validar estándares de codificación
    • Phpdox: generar documentación PHP
    • Php_Codebrowser: genera una representación navegable de código PHP con puntos destacados de violaciones ...
    • Unidad de PHP: ejecutar pruebas de PHP

    Jenkins luego envía todos los informes / datos a Sonar sin ser un corredor de sonnar.

  • Sonar está recopilando todos esos datos, almacenándolos en una base de datos que ofrece una forma de analizar la evolución de su código de aplicación a lo largo del tiempo. También muestra información de una manera más agradable que Jenkins.

Bloques que faltan

  • Implementación automatizada a QA: Me gustaría automatizar la implementación a QA env cuando un script de compilación es exitoso (basado en el éxito de la prueba). Esto debería desencadenar un proceso de extracción de los datos correctos en el control de calidad, realizar los cambios en la base de datos y la posible limpieza de archivos / carpetas y configuraciones de permisos.
  • Automatice la implementación en PROD : Esto debería hacer lo mismo que antes pero basado en la rama maestra. También deberíamos agregar otra ronda de pruebas en ese entorno PROD después de la implementación.

Revisión de herramientas

  • Git : no hay necesidad de explicar esto, se trata de versionar
  • Jenkins : herramienta CI, que automatiza la compilación (validación de código + pruebas)
  • Sonar : herramienta de informes (visualizar datos de compilación a lo largo del tiempo)
  • Maven : No estoy seguro de esto. ¿Es la pieza que falta para el despliegue? ¿O alguna otra herramienta de información?
  • Capistrano : herramienta de despliegue

Tu aportación :-)

  • Su punto en mi configuración general para CI (¿tiene sentido, estoy usando las herramientas adecuadas?)
  • ¿Cuál es, desde su experiencia, las mejores herramientas para el despliegue?
  • Como Jenkins es una especie de "despachador" en este esquema de implementación / CI global, ¿es el que desencadena también la implementación? En caso afirmativo, ¿asumo que es posible desencadenar algunas acciones basadas en el estado de compilación (éxito / fracaso)?

Muchas gracias por su tiempo y ayuda!


Hay algunos servicios para implementaciones automatizadas que conozco y son mucho más fáciles de configurar. Así, por ejemplo, se puede integrar en Dropbox e implementar automáticamente el código en repos / live incluso si hay algunos desarrolladores trabajando en ello. Ejemplo: http://unbouncepages.com/the-magicbox/


Se ve bien en general. Personalmente no he usado Sonar (pero soy consciente de ello) o Capistrano (ni siquiera he oído hablar de este), así que no puedo comentar sobre eso.

Maven es una herramienta de dependencia, compilación y despliegue, principalmente para proyectos Java. Ya estás cuidando de la "construcción" con Jenkins, así que no te preocupes por Maven.

En cuanto a la implementación, escribí una explicación muy detallada aquí sobre cómo implementar compilaciones Jenkins. Jenkins es totalmente capaz de realizar su implementación, así que ¿por qué molestarse en buscar otra herramienta en la mezcla? Lo único que necesita es un script bash (o por lotes, dependiendo de su entorno) para tomar sus archivos PHP (le recomiendo que los cierre como parte del trabajo de compilación) y los copie / despliegue en el servidor remoto.

Si tienes alguna pregunta más específica, pregunta lejos.