Sistema de Integración Continua para una Base de código Python


Estoy empezando a trabajar en un proyecto de hobby con una base de código Python y me gustaría configurar alguna forma de integración continua (es decir, ejecutar una batería de casos de prueba cada vez que se realiza un check-in y enviar correos electrónicos nag a las personas responsables cuando las pruebas fallan) similar a CruiseControl o TeamCity.

Me doy cuenta de que podría hacer esto con hooks en la mayoría de VCSes, pero eso requiere que las pruebas se ejecuten en la misma máquina que el control de versiones servidor, 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?

Author: q-l-p, 2008-08-02

7 answers

Ejecutamos Buildbot - Trac en el trabajo. No lo he usado demasiado ya que mi base de código aún no forma parte del ciclo de lanzamiento. Pero ejecutamos las pruebas en diferentes entornos (OSX / Linux / Win) y envía correos electrónicos, y está escrito en Python.

 27
Author: nlucaroni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-14 15:19:44

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

Hudson abraza a Python

Yo nunca lo he probado, sin embargo.

(Update , Sept. 2011: Después de una disputa de marca, Hudson ha sido renombrado a Jenkins .)

 28
Author: Joe Shaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-28 03:54:17

Segundo la integración Buildbot - Trac. Puede encontrar más información sobre la integración en el sitio web Buildbot. En mi trabajo anterior, escribimos y usamos el plugin que mencionan (tracbb). Lo que hace el plugin es reescribir todas las URL de Buildbot para que puedas usar Buildbot desde 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 Python directamente en el configuración. También es muy fácil escribir tus propios BuildSteps para ejecutar tareas específicas.

Usamos BuildSteps para obtener el código fuente de SVN, extraer las dependencias, publicar los resultados de las pruebas en WebDAV, etc.

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

 18
Author: Daan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-03 12:09:18

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

La configuración de Buildbot es pura de Python y bastante simple una vez que te acostumbras (mira los documentos de la API generados por epydoc para obtener 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 textual, HTML y salida de resumen, por lo que si desea tener salida de prueba navegable de varios niveles y así sucesivamente tendrá que construirlo usted mismo, o simplemente usar Hudson.

Hudson tiene un excelente soporte para explorar los resultados generales en conjuntos de pruebas y pruebas individuales; también es ideal para comparar la salida de prueba entre compilaciones, pero el material distribuido (maestro / esclavo) es comparativamente más complicado porque también necesita un entorno Java en los esclavos; además, Hudson es menos tolerante con los enlaces de red flaky entre el maestro y esclavo.

Por lo tanto, para obtener los beneficios de ambas herramientas, ejecutamos una sola instancia de Hudson, que captura los fallos de prueba comunes, luego hacemos regresión multiplataforma con Buildbot.

Aquí están nuestras instancias:

 17
Author: Nicholas Riley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-26 14:40:28

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

 7
Author: Pierre-Jean Coudert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 16:51:46

TeamCity tiene alguna integración de Python .

Pero TeamCity es:

  • no es de código abierto
  • no es pequeño, sino rico en características
  • es gratis para equipos pequeños y medianos.
 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 21:18:15

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

  • la configuración se realiza en menos de la mitad de una pantalla del archivo de configuración
  • puede hacer su propia instalación o simplemente usar la versión alojada gratuita
  • configuración semiautomática para repositorios github
  • no se necesita una cuenta en el sitio web; inicie sesión a través de github

Algunas limitaciones:

  • Python no es compatible como un lenguaje de primera clase (a partir del momento de escribiendo; pero puede usar pip y apt-get para instalar dependencias de python; vea este tutorial)

  • El código debe estar alojado en github (al menos cuando se utiliza la versión oficial)

 5
Author: Bernhard Kausler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-02 21:42:23