2008-08-02 26 views
48

Ich beginne die Arbeit an einem Hobby-Projekt mit einer Python-Codebasis und möchte eine Art von kontinuierlicher Integration einrichten (dh jedes Mal, wenn ein Check-In gemacht wird, eine Batterie von Testfällen) und versenden nag E-Mails an verantwortliche Personen, wenn die Tests fehlschlagen) ähnlich wie CruiseControl oder TeamCity.Continuous Integration System für eine Python Codebase

Ich weiß, ich könnte dies mit Hooks in den meisten VCSes tun, aber das erfordert, dass die Tests auf dem gleichen Computer wie der Versionskontrollserver ausgeführt werden, die nicht so elegant ist, wie ich möchte. Hat jemand irgendwelche Vorschläge für ein kleines, benutzerfreundliches Open-Source-System für die kontinuierliche Integration, das für eine Python-Codebasis geeignet ist?

Antwort

25

Wir betreiben Buildbot - Trac bei der Arbeit, ich habe es nicht zu viel, da meine Code-Basis nicht verwendet wird, Teil des Veröffentlichungszyklus noch. Aber wir führen die Tests in verschiedenen Umgebungen (OSX/Linux/Win) durch und senden E-Mails - und das ist in Python geschrieben.

26

Eine Möglichkeit ist Hudson. Es ist in Java geschrieben, aber es ist die Integration mit Python-Projekte:

Hudson embraces Python

Ich habe nie versucht, es selbst aber nicht.

(aktualisiert, September 2011. Nach einem Markenrechtsstreit hat Hudson Jenkins umbenannt)

+3

@ Joe, g ood Empfehlung. @Matt Lassen Sie sich nicht von der Tatsache, dass Hudson in Java geschrieben ist, abschrecken, wenn Sie ein Python-Typ sind. Es ist tot einfach einzurichten und auszuführen. Es integriert sich in pylint und coverage.py. Ich lasse es auf meinen Projekten laufen und liebe es. Es ist viel einfacher, dass BuildBot. Um es einzurichten und Hudson auszuführen, ist es ein Befehl. java -jar hudson.war Hier ist der beste Beitrag, den ich für die Einrichtung gesehen habe: http://www.rhonabwy.com/wp/2009/11/04/setting-up-a-python-ci -server-with-hudson/ –

+3

Hudson, der in Java geschrieben wird, ist so relevant wie Ihr Editor, den Sie in C++ geschrieben haben! Es ist einfach ein sehr gut geschriebenes, einfach zu installierendes und allgemein voll funktionsfähiges CI-Tool. Python kann sehr gut integriert werden, 'nosetests - with-xunit --with-coverage', pylint mit den Plugins" Violations "und" Cobertura "für Coverage – dbr

+1

@dbr: Nicht ganz richtig. Die Sprache, in der etwas geschrieben wird, beeinflusst oft die Software, mit der es am besten funktioniert ... insbesondere Systeme zu bauen. Als ich vor 2 Jahren Hudson anschaute, wollte ich Unit-Test-Ausgabe nur im JUnit-XML-Format; Meine Python-Unit-Testsuite hat das nicht getan.Aber wenn mein Projekt in Java wäre, hätte es aus der Box heraus funktioniert. Wie dem auch sei, es sieht so aus, als ob die Integration seither sowohl in Hudson als auch in Pythons Tools einen langen Weg zurückgelegt hat, und dafür bin ich dankbar. –

17

Zweitens die Buildbot - Trac Integration. Weitere Informationen zur Integration finden Sie unter Buildbot website. Bei meinem vorherigen Job haben wir das Plugin geschrieben und benutzt, das sie erwähnen (tracbb). Das Plugin schreibt alle Buildbot-URLs neu, sodass Sie Buildbot in Trac verwenden können. (http://example.com/tracbb).

Das wirklich schöne an Buildbot ist, dass die Konfiguration in Python geschrieben ist. Sie können Ihren eigenen Python-Code direkt in die Konfiguration integrieren. Es ist auch sehr einfach, eigene BuildSteps zu schreiben, um bestimmte Aufgaben auszuführen.

Wir verwendeten BuildSteps, um die Quelle von SVN zu erhalten, Abhängigkeiten zu ziehen, Testergebnisse zu WebDAV zu veröffentlichen, und so weiter.

Ich schrieb eine X10-Schnittstelle, so dass wir Signale mit Build-Ergebnissen senden konnten. Als der Bau fehlschlug, schalteten wir eine rote Lavalampe an. Als der Bau erfolgreich war, schaltete eine grüne Lavalampe ein. Gute Zeiten :-)

17

Wir verwenden sowohl Buildbot und Hudson für Jython Entwicklung. Beide sind nützlich, haben aber unterschiedliche Stärken und Schwächen.

Die Konfiguration von Buildbot ist reine Python und ziemlich einfach, sobald Sie den Dreh raus haben (sehen Sie sich die epydoc-generierten API-Dokumente für die aktuellsten Informationen an). Buildbot macht es einfacher, nicht-testende Aufgaben zu definieren und die Tester zu verteilen. Es hat jedoch wirklich kein Konzept für einzelne Tests, nur Text-, HTML- und Zusammenfassungsausgaben, also müssen Sie, wenn Sie mehrstufige, durchsuchbare Testausgaben usw. haben möchten, diese selbst erstellen oder einfach Hudson verwenden.

Hudson hat eine hervorragende Unterstützung, um von den Gesamtergebnissen in Testsuiten und Einzeltests zu bohren; es ist auch gut für den Vergleich Testausgabe zwischen Builds, aber die verteilte (Master/Slave) Zeug ist vergleichsweise komplizierter, weil Sie eine Java-Umgebung auch auf den Slaves benötigen; Außerdem ist Hudson weniger tolerant gegenüber flockigen Netzwerkverbindungen zwischen dem Master und den Slaves.

Um die Vorteile beider Tools nutzen zu können, führen wir eine einzelne Instanz von Hudson aus, die die üblichen Testfehler abfängt. Anschließend führen wir eine Multiplattform-Regression mit Buildbot durch.

Hier sind unsere Beispiele:

+0

'Jython Hudson' funktioniert nicht – jfs

+0

Entschuldigung, ich behalte das nicht :-) –

7

Wir Bitten Wich verwenden, ist mit trac integriert. Und es basiert auf Python.

6

TeamCity hat einige Python integration.

Aber Teamcity ist:

  • nicht Open-Source-
  • nicht klein, sondern funktionsreiche
  • für kleine Mitte Teams frei.
5

Ich habe sehr gute Erfahrungen mit Travis-CI für kleinere Code-Basen. Die wichtigsten Vorteile sind:

  • Aufbau ist in weniger als einer halben Bildschirm Konfigurationsdatei
  • getan
  • Sie können Ihre eigene Installation machen oder verwenden Sie einfach die kostenlose gehostete Version
  • halbautomatischen Setup für GitHub Repositories
  • kein Konto auf der Website erforderlich; Einige Einschränkungen anmelden via GitHub

:

  • Python ist nicht als First-Class-Sprache (ab Zeitpunkt des Schreibens unterstützt, aber Sie können pip verwenden und apt-get Python-Abhängigkeiten zu installieren, siehe this tutorial)

  • Code muss auf github gehostet werden (zumindest, wenn die offizielle Version mit)

+0

Python wird nun vollständig in Travis CI unterstützt: http://about.travis-ci.org/blog/announcing_python_and_perl_support_on_travis_ci/ –