Note that there are some explanatory texts on larger screens.

plurals
  1. PO"Pretty" Continuous Integration for Python
    primarykey
    data
    text
    <p>This is a slightly.. vain question, but BuildBot's output isn't particularly nice to look at..</p> <p>For example, compared to..</p> <ul> <li><a href="http://phpundercontrol.org/about.html" rel="noreferrer">phpUnderControl</a></li> <li><a href="http://jenkins-ci.org/content/about-jenkins-ci" rel="noreferrer">Jenkins</a> <ul> <li><a href="http://blogs.oracle.com/arungupta/entry/top_10_features_of_hudson" rel="noreferrer">Hudson</a></li> </ul></li> <li><a href="http://cruisecontrolrb.thoughtworks.com/" rel="noreferrer">CruiseControl.rb</a></li> </ul> <p>..and others, <a href="http://buildbot.python.org/stable/" rel="noreferrer">BuildBot</a> looks rather.. archaic</p> <p>I'm currently playing with Hudson, but it is very Java-centric (although with <a href="http://redsolo.blogspot.com/2007/11/hudson-embraces-python.html" rel="noreferrer">this guide</a>, I found it easier to setup than BuildBot, and produced more info)</p> <p>Basically: is there any Continuous Integration systems aimed at python, that produce lots of shiny graphs and the likes?</p> <hr> <p><strong>Update:</strong> Since this time the Jenkins project has replaced Hudson as the community version of the package. The original authors have moved to this project as well. Jenkins is now a standard package on Ubuntu/Debian, RedHat/Fedora/CentOS, and others. The following update is still essentially correct. The starting point to do this with <a href="http://jenkins-ci.org" rel="noreferrer">Jenkins</a> is different.</p> <p><strong><em>Update:</em></strong> After trying a few alternatives, I think I'll stick with Hudson. <a href="http://integrityapp.com/" rel="noreferrer">Integrity</a> was nice and simple, but quite limited. I think <a href="http://buildbot.net/trac" rel="noreferrer">Buildbot</a> is better suited to having numerous build-slaves, rather than everything running on a single machine like I was using it.</p> <p>Setting Hudson up for a Python project was pretty simple:</p> <ul> <li>Download Hudson from <a href="http://hudson-ci.org/" rel="noreferrer">http://hudson-ci.org/</a></li> <li>Run it with <code>java -jar hudson.war</code></li> <li>Open the web interface on the default address of <code>http://localhost:8080</code></li> <li>Go to Manage Hudson, Plugins, click "Update" or similar</li> <li>Install the Git plugin (I had to set the <code>git</code> path in the Hudson global preferences)</li> <li>Create a new project, enter the repository, SCM polling intervals and so on</li> <li>Install <code>nosetests</code> via <code>easy_install</code> if it's not already</li> <li>In the a build step, add <code>nosetests --with-xunit --verbose</code></li> <li>Check "Publish JUnit test result report" and set "Test report XMLs" to <code>**/nosetests.xml</code></li> </ul> <p>That's all that's required. You can setup email notifications, and <a href="http://wiki.hudson-ci.org/display/HUDSON/Plugins" rel="noreferrer">the plugins</a> are worth a look. A few I'm currently using for Python projects:</p> <ul> <li><a href="http://wiki.hudson-ci.org/display/HUDSON/SLOCCount+Plugin" rel="noreferrer">SLOCCount plugin</a> to count lines of code (and graph it!) - you need to install <a href="http://www.dwheeler.com/sloccount/" rel="noreferrer">sloccount</a> separately</li> <li><a href="http://wiki.hudson-ci.org/display/HUDSON/Violations" rel="noreferrer">Violations</a> to parse the PyLint output (you can setup warning thresholds, graph the number of violations over each build)</li> <li><a href="http://wiki.hudson-ci.org/display/HUDSON/Cobertura+Plugin" rel="noreferrer">Cobertura</a> can parse the coverage.py output. Nosetest can gather coverage while running your tests, using <code>nosetests --with-coverage</code> (this writes the output to <code>**/coverage.xml</code>)</li> </ul>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload