2008-08-02 15 views
48

Estoy empezando a trabajar en un proyecto de hobby con una base de código python y me gustaría configurar algún tipo de integración continua (es decir, ejecutar una batería de casos de prueba cada vez que se realiza un check-in y enviar mensajes maliciosos a personas responsables cuando fallan las pruebas) similar a CruiseControl o TeamCity.Sistema de integración continua para Python Codebase

Me doy cuenta de que podría hacer esto con ganchos en la mayoría de los VCS, pero eso requiere que las pruebas se ejecuten en la misma máquina que el servidor de control de versiones, que no es tan elegante como me gustaría. ¿Alguien tiene alguna sugerencia para un sistema de integración continua pequeño, fácil de usar y de código abierto adecuado para una base de código Python?

Respuesta

25

corremos Buildbot - Trac en el trabajo, no he utilizado demasiado ya que mi base de código no es parte del ciclo de lanzamiento todavía. Pero ejecutamos las pruebas en diferentes entornos (OSX/Linux/Win) y envía correos electrónicos, y está escrito en python.

26

Una posibilidad es Hudson. Está escrito en Java, pero no hay integración con proyectos de Python:

Hudson embraces Python

nunca he probado a mí mismo, sin embargo.

(actualización, septiembre de 2011:. Después de una disputa de marca Hudson ha sido renombrado a Jenkins)

+3

@ Joe, g buena recomendación. @Matt No dejes que el hecho de que Hudson esté escrito en Java te asuste si eres un tipo pitón. Es muy fácil de configurar y ejecutar. Se integra con pylint y coverage.py. Lo tengo funcionando en mis proyectos y me encanta. Es mucho más simple que BuildBot. Para configurarlo y ejecutar Hudson es un comando. java -jar hudson.war Aquí está la mejor publicación que he visto para configurarlo: http://www.rhonabwy.com/wp/2009/11/04/setting-up-a-python-ci -server-with-hudson/ –

+3

¡Hudson está escrito en Java y es tan relevante como su editor que usa está escrito en C++! Es una herramienta de CI muy bien escrita, fácil de configurar y con todas las características. Python puede estar muy bien integrado, 'nosetests --with-xunit--with-coverage', pylint con los complementos de" Violations ", y" Cobertura "para cobertura – dbr

+1

@dbr: No totalmente cierto. El lenguaje en el que algo está escrito a menudo influye en el software con el que funciona mejor ... especialmente en los sistemas de compilación. Cuando miré a Hudson ~ hace 2 años, quería salida de prueba unitaria solo en el formato XML de JUnit; mi suite de prueba de unidad Python no hizo eso.Pero si mi proyecto estuviera en Java, hubiera funcionado de la caja. En cualquier caso, parece que la integración ha recorrido un largo camino en las herramientas de Hudson y Python desde entonces, y estoy agradecido por eso. –

17

Segundo, la integración Buildbot - Trac. Puede encontrar más información sobre la integración en el Buildbot website. En mi trabajo anterior, escribimos y utilizamos el complemento que mencionan (tracbb). Lo que hace el complemento es volver a escribir todas las URL de Buildbot para que pueda usar Buildbot desde dentro de Trac. (http://example.com/tracbb).

Lo realmente bueno de Buildbot es que la configuración está escrita en Python. Puede integrar su propio código de Python directamente a la configuración. También es muy fácil escribir tus propios BuildSteps para ejecutar tareas específicas.

Utilizamos BuildSteps para obtener la fuente de SVN, extraer las dependencias, publicar los resultados de las pruebas en WebDAV, etcétera.

Escribí una interfaz X10 para que pudiéramos enviar señales con resultados de compilación. Cuando la compilación falló, encendimos una lámpara de lava roja. Cuando la construcción tuvo éxito, se encendió una lámpara de lava verde. Buenos tiempos :-)

17

Usamos Buildbot y Hudson para el desarrollo de Jython. Ambos son útiles, pero tienen diferentes fortalezas y debilidades.

La configuración de Buildbot es puramente Python y bastante simple una vez que lo dominas (mira los documentos API generados por epydoc para la información más reciente). Buildbot hace que sea más fácil definir tareas que no sean de prueba y distribuir los probadores. Sin embargo, realmente no tiene ningún concepto de pruebas individuales, solo textuales, HTML y resultados de resumen, por lo que si desea tener resultados de pruebas navegables de múltiples niveles y demás, tendrá que compilarlo usted mismo o simplemente usar Hudson.

Hudson tiene una excelente compatibilidad para obtener resultados globales en suites de prueba y pruebas individuales; también es excelente para comparar la salida de prueba entre compilaciones, pero el material distribuido (maestro/esclavo) es comparativamente más complicado porque también se necesita un entorno Java en los esclavos; Además, Hudson es menos tolerante con los enlaces de red escamosa entre el maestro y los esclavos.

Por lo tanto, para obtener los beneficios de ambas herramientas, ejecutamos una sola instancia de Hudson, que detecta las fallas de prueba comunes, luego realizamos una regresión multiplataforma con Buildbot.

Éstos son nuestros casos:

+0

'Jython Hudson' no funciona – jfs

+0

perdón por eso, no lo mantengo :-) –

7

Estamos utilizando Bitten cosa que está integrado con trac. Y está basado en Python.

6

TeamCity tiene algunos Python integration.

Pero TeamCity es:

  • no de código abierto
  • no es pequeña, sino más bien ricos de la característica
  • es libre para equipos pequeños mediados.
5

Tengo muy buenas experiencias con Travis-CI para bases de código más pequeñas. Las principales ventajas son:

  • configuración se realiza en menos de la mitad de una pantalla de archivo de configuración
  • que puede hacer su propia instalación o simplemente utilizar la versión alojada libre
  • configuración semi-automática para los repositorios de GitHub
  • no se necesita una cuenta en el sitio web; Ingresar a través de GitHub

algunas limitaciones:

  • Python no se admite como un lenguaje de primera clase (a partir del momento de la escritura, pero se puede utilizar PIP y apt-get para instalar las dependencias de pitón; véase this tutorial)

  • código tiene que ser alojado en gitHub (al menos cuando se utiliza la versión oficial)

+0

Python ahora es totalmente compatible con Travis CI: http://about.travis-ci.org/blog/announcing_python_and_perl_support_on_travis_ci/ –

Cuestiones relacionadas