2010-10-22 14 views
9

Ich möchte ein einfaches CI für ein kleines Entwickler-Setup. Zwei Motivationen - ein kompletter Build braucht etwas Zeit und eine zu erwartende Testsuite wird auch etwas dauern. Ich würde wirklich lieber nicht kopfüber in einen der großen Spieler springen, die einen Java-Anwendungscontainer oder was auch immer benötigen, um phantastische Graphen mit mehreren Farben usw. zu zeigen. Ich wäre an etwas "kulturellem" Haskellisch besonders interessiert - vorzugsweise an Kommandozeilen-Interaktion oder Konfigurationsdateien und Interop mit Darcs ist das absolute muss.Leichte Continuous Integration für eine zentrale Haskell/Darcs-Toolchain?

Gibt es solche Tools, oder bin ich mit einem der großen Spieler festgefahren oder schreibe ich meinen eigenen?

Apropos, ich erinnere mich, dass es eine Build Farm für GHC gibt. Wenn ich es ansehe, bemerke ich, dass es früher Buildbot verwendet hat und jetzt einen benutzerdefinierten Builder verwendet. Obwohl diese für einen anderen Workflow eingerichtet sind, wäre eine von beiden eine einfachere und einfachere Lösung?

Edit: Ich gehe mit Buildbot für jetzt. Wird aktualisiert mit wie es funktioniert.

Edit2: Ben Lippmeier hat buildbox auf hackage gesetzt, was auch die Grundlage für eine native Haskell CI-Lösung zu sein scheint. Es ist derzeit nicht dokumentiert, und wahrscheinlich nicht vollständig für meine Bedürfnisse, aber hier ist es: http://hackage.haskell.org/package/buildbox. Er hat es benutzt, um einen Buildbot für Repa zu schreiben: http://code.haskell.org/repa/repa-head/repa-bot/.

Antwort

3

Das Darcs-Team selbst verwendet buildbot. Ich bin mir nicht ganz sicher, wo die Skripte leben, aber ich bin mir sicher, wenn Sie auf der Mailingliste oder im IRC nachfragen, sollten sie leicht zu erreichen sein.

+0

Danke.Ich denke, dass Buildbot die beste Lösung ist, obwohl es ein wenig mühsam war, sich damit vertraut zu machen, und die Darcs-Integration ist etwas unterdokumentiert. Ich könnte versuchen, meine Erfahrungen zu schreiben, nachdem dieser Prozess abgeschlossen ist ... – sclv

4

Also hier ist was ich getan habe.

  1. installieren Sie Buildbot-Server/Buildslave gemäß Anweisungen.
  2. das darcs_buildbot Skript installieren: https://github.com/buildbot/buildbot/blob/master/master/contrib/darcs_buildbot.py
  3. Änderung der posthook in _darcs/Voreinstellungen gelten (dies für einen gemeinsamen Repo ist) auf die folgenden:

posthook chmod a + w myrepo/_darcs/apply index myrepo/.darcs_buildbot-lastchange; /usr/local/bin/darcs_buildbot.py buildbotmachine: buildbotport;

gelten Lauf posthook

Was die buildbot Konfigurationsdatei, so etwas wie die folgende ist ein einfaches Setup:

darcsroot = "/myrepo/" 

from buildbot.process import factory 
from buildbot.steps.source import Darcs 
from buildbot.steps.shell import Compile 
from buildbot.steps.shell import Test 
f1 = factory.BuildFactory() 
f1.addStep(Darcs(repourl=darcsroot)) 
f1.addStep(Compile(command=["ghc","--make","Setup.hs"])) 
f1.addStep(Compile(command=["./Setup","configure"],warningPattern="^\(Warning:")) 
f1.addStep(Compile(command=["./Setup","build"],warningPattern="^\(Warning:"))  
b1 = {'name': "buildbot-full", 
     'slavename': "bot1name", 
     'builddir': "full", 
     'factory': f1, 
     } 
c['builders'] = [b1] 

Schedulers usw. müssen auch als pro-Dokumentation konfiguriert werden.

Jetzt, wenn jemand zum freigegebenen Repo schiebt, wird der Build ausgelöst. Zusätzliche Testbefehle können einfach hinzugefügt werden.

Bisher hat das super geklappt!

Ich glaube, ich habe den Buildsklave gepatcht, um inkrementell anstatt den vollen Repo zu ziehen, aber ich kann mich nicht erinnern, was ich getan habe, und weiß nicht, ob es noch mit neueren Versionen notwendig ist.

Verwandte Themen