Kontinuierliche Integration am Beispiel Jenkins -...

25
Über mich Was heißt kontinuierliche Integration? Test-Schnittstellen Jenkins Kontinuierliche Integration am Beispiel Jenkins Sujeevan Vijayakumaran Ubucon, Berlin 20. Oktober 2012 1 / 25

Transcript of Kontinuierliche Integration am Beispiel Jenkins -...

Ü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