Seite wählen

NETWAYS Blog

Das Icinga Buildserver Projekt

Der neue Icinga Buildserver soll die Pakete in Docker Containern die das entsprechende Zielsystem ab um rpm- und deb-Pakete auf gleiche Art betreuen zu können. Das heißt anstatt die eigentlich praktischen Build-Umgebungen wie pbuilder und sbuild werden nicht verwenden.
logo_128
Stattdessen haben wir ein paar lustige Bash-Skripte gebaut die das kompilieren und verpacken übernehmen. Vor allem bei Debian Paketen gibt es dabei ein paar interessante Schritte die sonst von eben genannten Tool übernommen werden. Wie etwa das finden von Abhängigkeiten:

dpkg-checkbuilddeps 2>&1 \
  | grep "^$prefix" \
  | sed -e "s/$prefix//" -e s'/([^)]*)//g' -e 's/ \+| \+/|/g'

Das Ganze ist es dann aber Wert, wenn build.icinga.com erst einmal umgezogen wurde. (Man kann an der Seite sofort merken ob es sich um die alte oder neue handelt)
Das ganze Projekt geht inzwischen schon etwas länger aber nähert sich jetzt seiner Vollendung.

Weekly Snap: LConf to Come, Coverage.py & Jenkins, DevOps

weekly snap29 April – 3 May turned over a new month with a LConf preview, Puppet course, video on DevOps and tip for Coverage Code and Jenkins.
Michael teased us with the new features to come in LConf while Johannes showed how to integrate coverage.py into Jenkins.
Lastly, Sebastian reflected on a successful 3-day training course he ran on Puppet in Cologne and Bernd shared a video on the history of DevOps.

coverage.py in Jenkins integrieren

Nachdem bereits letzte Woche Gunnar etwas zu code coverage geschrieben hat werde ich jetzt noch einmal nachlegen, mich jedoch auf coverage.py und dessen Nutzung sowie die Integration in Jenkins beschränken.
Was ist coverage.py?
coverage.py ist ein Tool um für in Python geschriebenen Quellcode coverage reports zu generieren. Aber zuerst einmal müssen ein paar Informationen generiert werden, damit überhaupt irgendetwas visuell dargestellt werden kann:
coverage run python-script
Reports werden dann folgendermaßen generiert:
coverage report # Text-basierter Report in der Konsole
coverage html -d ziel-verzeichnis # html Report mit im Quellcode hervergehobenen Zeilen
coverage xml -o xml-datei # xml Report für die Weiterverarbeitung in anderen Systemen
Das ganze geht natürlich auch in Verbindung mit nosetests. Details dazu könnt ihr hier finden.
Integration in Jenkins
Um nun coverage reports in Jenkins für das eigene Projekt zu generieren greifen wir selbstverständlich auf coverage.py zurück. Um das zu realisieren bietet sich „Execute shell“ als build step an in welchem wir oben angegebene Befehle ausführen lassen:
coverage run python-script
coverage xml # Output landet per default in coverage.xml
Dann legt man eine post-build action an, die sich „Publish Cobertura Coverage Report“ nennt und gibt dort bei „Cobertura xml report pattern“ den Pfad zu der vom build step generierten xml Datei an. (**/coverage.xml, falls die Datei direkt im workspace liegt.)
Soweit so gut. Wenn nun ein Build ausgeführt wird, hat man am Ende einen coverage report in Jenkins, der jedoch keinerlei Details dazu aufführt welche Zeilen im Quellcode denn nun genau betroffen sind. Zu beurteilen woran das liegt, maße ich mir hier einfach mal nicht an und gebe nur einen kleinen Hinweis wie dieses Problem mit einer kleinen Erweiterung des build steps zu lösen ist:
sed -i -e 's??ein/relativer/pfad/zum/quellcode?' coverage.xml
sed -i -e 's?filename="'$WORKSPACE'/ein/relativer/pfad/zum/quellcode/?filename="?' coverage.xml
Wobei hier „ein/relativer/pfad/zum/quellcode“ zu ersetzen ist. Zu beachten ist hierbei, dass es sich tatsächlich um einen relativen Pfad handeln muss, ausgehend vom workspace. Beim nächsten Build gibts dann auch hervorgehobene Zeilen im Quellcode. 🙂
Zu guter letzt noch ein Protip:
Um coverage.py dazu zu bringen branch coverage (conditionals usw.) zu messen muss eine spezielle Option angegeben werden:
coverage run --branch python-script
Damit das auch mit nosetests funktioniert, bedarf es erneut eines kleinen Tricks:
touch .coveragerc
echo "# .coveragerc to control coverage.py\n\n[run]\nbranch=True" > .coveragerc
Das muss im selben Verzeichnis ausgeführt werden in dem auch coverage.py selbst ausgeführt werden wird.
Und nun viel Spaß mit den vielen bunten Trends und Quellcodes! 😀

Johannes Meyer
Johannes Meyer
Lead Developer

Johannes ist seit 2011 bei uns und inzwischen, seit er 2014 die Ausbildung abgeschlossen hat, als Lead Developer für Icinga Web 2, Icinga DB Web sowie alle möglichen anderen Module und Bibliotheken im Web Bereich zuständig. Arbeitet er gerade mal nicht, macht er es sich bei schlechtem Wetter am liebsten zum zocken oder Filme/Serien schauen auf dem Sofa gemütlich. Passt das Wetter, geht's auch mal auf eines seiner Zweiräder. Motorisiert oder nicht.

Weekly Snap: Selenium, Jenkins & Valgrind Help, FLOSS UK & OSDC intensive workshops

19 – 23 March was packed with events – upcoming and bygone, international and local; tech advice from the development team and contributions from our consultants.
In a very international NETWAYS week, Marius and Eric headed off to the Ukraine to run an Icinga and InGraph training course for a client, while Bernd joined the FLOSS UK Spring Conference with a presentation on “Icinga at Deutsche Welle”. He also snapped up the opportunity to join a lively Puppet Camp in Edinburgh a day after.
Tobias then contemplated potential blog content for the future and Christoph introduced himself, his work and life out of the office.
Pamela shared our happy snaps from the recent CeBIT 2012 and reminded OSDC attendees to get their tickets for our intensive workshops on 24 April (conference eve).
Finally, from the development team, Ansgar offered some advice for common Selenium and Jenkins problems, while Gunnar offered his tip for finding memory leaks with Valgrind.

Weekly Snap: From Using Jenkins & Magic Mouses, to Startup Weekend & Classes to Come

29 Aug – 2 Sep ended the summer break by announcing the coming course calendar, Startup Weekend dates and a few tips for using Jenkins and the Apple Magic Mouse.
Back to school, Markus opened our open source classroom doors once more. Important dates for the new term include: 13 – 15 September for ‚Configuration Management with Puppet‚ and 14 – 15 December for ‘SLA Reporting with Jasper’. The Nagios Availability Monitoring course is already booked out, so get onto our training centre quick to snap up your place while you can!
Georg then revealed the truth behind Apple’s Magic Mouse in everyday use. He pointed out common problems in using the mouse and how to deal with them. From getting the mouse to connect to the computer to speeding up the pointer speed and using external software like the “Better Touch Tool” add extra functions, Georg had the mouse all figured out.
Based on his own recent experience, Ansgar gave a comprehensive user guide to Jenkins as a Continuous Build Server for PHP projects. Starting from configuration with Jenkins Job Template for PHP Projects and useful plugins, he explained automation with an Ant Build script and distributed builds to give newbies all they need to set up their own Jenkins system.
Finally, Bernd got excited about the upcoming 3rd Startup Weekend in Nuremberg on 11 – 13 November. The event which sees companies established in the span of a weekend will be held at the new Coworking Nürnberg space this year. Once again, we will be supporting the Startup Weekend, and we look forward to a weekend full of ideas, socialising and hopefully a new company or two.