Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Kontinuierliche Integration am Beispiel Jenkins
Sujeevan Vijayakumaran
Ubucon, Berlin
20. Oktober 2012
1 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Inhaltsverzeichnis
1 Über mich
2 Was heißt kontinuierliche Integration?
3 Test-Schnittstellen
4 Jenkins
2 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Über mich
Sujeevan „svij“ VijayakumaranJahrgang 1992wohnhaft Castrop-RauxelStudium am IT-Center Dortmund (FH Dortmund)C++-Entwickler bei otris Software AG (Dortmund)
Aktivität in FLOSS-Projekten:seit 09/2010: Ikhayateam ubuntuusers.de (Teamleiter)seit 09/2012: Redaktionsmitglied bei freiesMagazin
3 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Was heißt kontinuierliche Integration?
Zwei Grundsätze:1 Integration2 Kontinuierlich
4 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Integration
Einfügen des geänderten Quellcodes in das UrsprungsprojektEinsatz von Versionsverwaltungssystemen wie Git, SVN,Mercurial etc.
5 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Kontinuierlich
Integration des neuen bzw. veränderten Quellcodes erfolgt inkurzen Abständen – meist täglichFührt zum schnellen Erkennen von Fehlern im QuellcodeHäufig wird dabei an Hand von „Nightly Builds“ diekontinuierliche Integration getestet
6 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Test-Schnittstellen
1 Unit-Tests2 Integrations-Tests3 System-Integration
7 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Test-Schnittstellen
Test-Schnittstellen für ein Apache-Module:Funktionsweise der Methoden – z.B. in C++HTTP-Schnittstelle – z.B. mit Perl oder Python Skripte dieHTTP-Requests abschicken
8 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Beispiel: Testen am XML-Parser
Einlesen eines RSS-Feeds (Eingabeobjekt):XML-Datei valide?XML-Datei wohlgeformt?
Schreiben des RSS-Feeds (Ausgabeobjekt):Richtiger Pfad?Erwartungsgemäß geschrieben?
9 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Jenkins
Maintainer: Kohsuke KawaguchiEntwickelt bei Sun unter dem Namen „Hudson“Nach Übernahme durch Oracle entstand der Fork „Jenkins“Programmiersprache: JavaPlattformunabhängigunter MIT-Lizenz
10 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Workflow in Jenkins
1 Auslösung2 Ausschecken3 Build-Vorgang4 Post-Buildvorgang
11 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Workflow in Jenkins
Der Auslöser:Zeitgesteuert: bspw. jeder Tag um 18 Uhr.Eventgesteuert: Löse aus, wenn „Vorgänger-Projekt“erfolgreich.Änderung im Source-CodeManuell
12 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Ausschecken des Quellcodes
Das Repository (Git, SVN, . . . ) wird ausgescheckt. Auch„checkout“ genannt.Der Quellcode wird dabei heruntergeladen.
13 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Buildvorgang
Das Projekt wird kompiliert.Die Tests werden ausgeführt.Sofern währenddessen ein Fehler auftritt, wird derBuildvorgang abgebrochen und geht in den nächsten Schrittüber.
14 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Post-Buildvorgang
Bezeichnet alle Aktionen die nach einem Buildvorgang ausgeführtwerden:
Wenn erfolgreich: Bauen eines Paketes (deb, rpm, . . . )Prüfen der TestergebnisseSetzen des Buildstatusses (Erfolgreich, Instabil,Fehlgeschlagen)Code-AnalyseVersenden einer Benachrichtigung an die Entwickler (E-Mail,Jabber, IRC-Bot,. . . )„Trigger“ für mögliche Nachfolgende Jenkins-Jobs
15 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Jenkins – Was kann es noch?
Build-Parametrisierung: Verschiedene CPU-Architektureninnerhalb eines Jenkins-JobsAusreizen der Möglichkeiten durch den Einsatz vonShell-SkriptenZahlreiche Anzahl an verfügbaren Plugins.
16 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Ein Beispiel. . .
Ein fiktives Projekt hat diverse Ansprüche:Durch Kontinuierliche Integration bzw testgetriebenerEntwicklung soll eine gute Stabilität garantiert sein.Es soll sowohl unter Windows als auch unter den gängigenLinux-Distributionen funktionierenMöglichst jeden Sonntag soll es ein stabiles Release gebenDie Dokumentation soll stets öffentlich zugänglich sein undauch aktuell gehalten sein, sie soll sowohl in HTML als auchals PDF verfügbar sein.Zudem wird ein Bugtracker gebraucht, in dem Nutzer Ticketserstellen können.
17 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel – Kontinuierliche Integration
Als Versionsverwaltungssystem wird Git genutzt.Als Bugtracker wird Redmine genutzt.
18 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel – Bugtracking und Workflow
Benutzer erstellt ein Bug-Report zu einem kleinen FehlerProgrammierer korrigiert den Fehler zunächst und machteinen Commit in das RepositoryDanach wird ein Testfall zu dem Fehler geschriebenIn der Commit-Nachricht wird auf das entsprechende Ticketverwiesen: Fixed Bug + Unit-Test. refs #1337Im Ticket unter Redmine wird direkt auf das entsprechendeCommit verlinkt.
19 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel – Plattformunabhängigkeit
Für die kontinuierliche Integration wird Jenkins genutzt.Es werden hierfür zwei Jenkins-Jobs angelegt. Einmal fürWindows und einmal für LinuxWindows: Enthält vier Knoten: Windows Server 2012 mitVisual Studio 2012 und Windows Server 2008 R2 mit VisualStudio 2010, beide jeweils für 32-Bit und 64-Bit.Linux: 8 Knoten: SLES, RHEL, Debian, Ubuntu. Ebenfallsjeweils 32-Bit und 64-Bit.„Echte“ benötigte Server: 2x Windows, 1x Jenkins-Host, 1xJenkins-SlaveJenkins-Slave beinhaltet acht VMs mit den oben genanntenDistributionen.
20 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel – Jenkins
Build-Start: Täglich 19 UhrWindows-Jenkins-Jobs laufen parallel an.Linux-VMs werden nacheinander per SSH hochgefahren undnach einem Lauf wieder heruntergefahren
21 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel – Wöchentliches Release
Bei erfolgreichen Jenkins-Lauf werden installierbare Paketegeschnürt.Sofern der Sonntags-Lauf erfolgreich war, können die Paketean das QS-Team übergeben werden.
22 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel – Dokumentation
Bei erfolgreichen Jenkins-Lauf wird eine weitere Jenkins-JobsausgeführtErzeugt HTML-Dokumentation und daraus auch einePDF-VarianteErzeugnisse wird automatisch auf doc.project.nameveröffentlichtNewsletter-Abonnenten werden über neue Version undDokumentation informiert
23 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Das fiktive Beispiel
Danach fängt es alles wieder von vorne an. Und das meiste davonvöllig automatisch!
24 / 25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins
Vielen Dank für die Aufmerksamkeit!
Die Folien und Inhalte unterliegen (wenn nicht anders angegegen) derCreativeCommons
„Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported“.
Copyright 2012 Sujeevan Vijayakumaran
25 / 25
Top Related