Travis CI - UOS-Open-Source-Softwareentwicklung/oss1314 GitHub Wiki
Kurzbeschreibung eines Open-Source-Tools
Universität Osnabrück
Tilo Wiedera - [email protected]
Übersicht
Travis CI ist ein Werkzeug zur Kontinuierlichen Integration von Software Projekten die auf Github verwaltet werden. Die Nutzung ist dabei für Open Source Projekte kostenlos. [1] Travis erfüllt damit einen ähnlichen Zweck wie vergleichbare CI-Umgebungen, etwa Jenkins oder CruiseControl.
Kontinuierliche Integration
Continuous Integration ist eine Praxis, die erstmals im Rahmen des sogenannten Extreme Programming genutzt wurde. [2] Schlüsselaspekt ist dabei ein regelmäßiges, automatisches Build des gesamten Projekts mit anschließender Ausführung aller relevanten Tests. [3] Continuous Integration umfasst noch einige weitere Aspekte, so beispielsweise eine Kontrolle der Qualität und insbesondere Lesbarkeit des Code. Travis aber ist exklusiv für das Übersetzen der Projekte und Ausführen der entsprechenden Scripts intendiert. Dabei liegt es im Ermessen des Programmierers, ob nur Tests ausgeführt oder auch entsprechende Code-Metriken berechnet werden. [1] Auf der anderen Seite bietet GitHub für viele dieser best practices bereits entsprechende Features direkt oder durch andere, mit GithHub integrierte, Drittanbieter an.
Suchanfragen zu "Continuous Integration" auf Google (relativ zum Maximum)
Aus der Praxis der kontinuierlichen Integration ergeben sich für bestimmte Projekte erwiesenermaßen erhebliche Vorteile. Duvall beschreibt die wesentlichen Verbesserungen folgendermaßen: [4]
- Reduce Risks
Die Wahrscheinlichkeit gravierende Fehler frühzeitig zu erkennen steigt. Durch bestimmte Messungen kann die Qualität des Code fortlaufend überprüft werden. Annahmen und Voraussetzungen können durch eine zentrale Beschreibung der Testumgebungen reduziert werden. - Reduce Repetitive Processes
Alle automatisierbaren Prozesse sollten automatisiert werden. Dazu gehört allem voran die Ausführung von Tests, Messungen und das Propagieren der Ergebnisse, nachdem ein Programmierer das Repository modifiziert hat. - Generate Deployable Software
Die Software kann, sofern sie einen bestimmten Reifegrad erreicht hat, jederzeit an den Kunden ausgeliefert werden. Dieser kann sich über den gesamten Entwicklungsprozess schnell und unkompliziert ein Bild des aktuellen Standes machen. Deadlines werden tendenziell nicht durch intensives Bugfixing vor dem Projektabschluss überschritten, Probleme in der Kommunikation mit dem Kunden werden potentiell früher erkannt. - Enable Better Project Visibility
Veränderungen an Parametern wie Code-Qualität und austehenden Tests können frühzeitig erkannt werden und in die weitere Planung einfließen. Es ist jederzeit möglich, den aktuellen Stand des Projekts anhand dieser Messungen zu evaluieren. - Establish Greater Product Confidence
Das Vertrauen in das Projekt kann sowohl auf Seite des Kunden als auch auf Seite der Entwickler durch die zentrale Messbarkeit des Fortschritt und den direkt wahrnehmbaren Einfluss der einzelnen Entwickler erheblich gesteigert werden.
Neben den theoretischen, für Softwareentwickler möglicherweise offensichtlich erscheinenden, Vorteilen konnte die Dienlichkeit der Methotik auch anhand wissenschaftlicher Studien belegt werden. [5] Geschichte und Entwicklung Travis CI wurde 2010 als Berliner Startup u.a. von Josh Kalderimis gegründet. [9] Travis steht unter MIT-Lizenz und ist damit selbst ein Open-Source Projekt. [7] Obwohl Open-Source-lizenziert, ist Travis laut den eigenen Entwicklern nicht leicht zu installieren. Die erste Version von Travis war ausschließlich auf Continuous Integration im Umfeld von Ruby ausgerichtet. [8] Dementsprechend zählen Projekte wie Rails, RubyGems und Bundler auch zu den ersten Programmen, die mit Travis getestet wurden. [6] Im Jahr 2012 wurde die sogenannte Travis CI Love Campaign gestartet, um Travis weiter zu finanzieren. Dabei wurden insgesamt etwa 130.000 USD gespendet. [10] Das Projekt finanziert sich heute über die bezahlte Unterstützung von privaten Repositories. Travis nutzt Heroku als Hosting Service für seine Anwendung. [8] Travis wird selbst auf GitHub entwickelt und nutzt das hauseigene System für Continuous Integration.
Anwendung
Die Anwendung von Travis gestaltet sich, entsprechend den erklärten Zielen des Projekts, als sehr einfach. Allem voran wird kein kompliziertes Setup und keine weiteren Ressourcen, also insbesondere kein Integration Server, benötigt. Das GitHub Repository muss lediglich eine .travis.yml Datei zur Konfiguration von Travis enthalten und der entsprechende Service Hook aktiviert werden. [1] Travis sieht seine Stärken u.a. in der Unterstützung einer großen “dependency matrix”. Dabei wird das zu testende System auf allen Permutationen verschiedener Versionen unterschiedlicher Softwarekomponenten getestet. Auch Pull-Requests, die im Rahmen von Open Source Projekten eine immense Rolle spielen, werden von Travis nativ untersützt. So ist es möglich, noch vor dem mergen des Requests die Testergebnisse über Travis abzurufen. Mittlerweile unterstützt Travis eine ganze Reihe verschiedener Sprachen und Umgebungen, so etwa C/C++, Java, Node, PHP und Python. [1] Ingesamt zielt Travis darauf ab, die sich wiederholende Arbeit im Open Source Umfeld auf effektive Art und Weise zu minimieren und damit, wie von Josh Kalderimis immer wieder betont, die Welt zu verbessern. [6]
Verbreitung und Alternativen
Neben Travis existieren noch einige vergleichbare Dienste, die ebenfalls großen Wert auf einfache Bedienbarkeit legen. Zu nennen sind hier beispielsweise drone.io, codeship.io, CircleCi und cisimple. Drone.io hebt sich durch eine noch etwas einfachere aber auch weniger anpassbare Konfiguration im vergleich zu Travis aus. Travis verfügt im Jahr 2013 über 40 Server mit mehr als 600 virtuellen Maschinen und führt täglich im Mittel etwa 3000 Stunden Tests aus, von denen etwa die Hälfte auf private Repositories entfällt. [10]
Referenzen
- [1] http://docs.travis-ci.com/user/getting-started/
- [2] Extreme Programming, http://en.wikipedia.org/wiki/Extreme_programming, 25.03.2014
- [3] Martin Fowler (2006): Continuous Integration, http://www.martinfowler.com/articles/continuousIntegration.html, 25.03.2014
- [4] Paul M. Duvall, Steve Matyas, Andrew Glover (2007): Continuous Integration - Improving Software Quality and Reducing Risk, Pearson Education Inc. (pp. 29-32)
- [5] Antti Seppälä (2010): Improving software quality with Continuous Integration, Aalto University (pp. 43-46)
- [6] Josh Kalderimis - Travis CI, https://www.youtube.com/watch?v=XvuNNxSJUpQ, 26.03.2014
- [7] Travis CI License, https://github.com/travis-ci/travis-core/blob/master/LICENSE, 26.03.2014
- [8] Travis-CI social continuous integration (TYPO3 Conf 2012), https://www.youtube.com/watch?v=JicPX7K_dJs, 26.03.2014
- [9] SCB12 Interview: Travis CI (Startup Camp Berlin 2012), https://www.youtube.com/watch?v=qOdOcuE0C0I, 26.03.2014
- [10] Travis CI Love Campaign, http://love.travis-ci.com, 26.03.2014