Jenkins und Perl-Projekte

Post on 18-Nov-2014

1.036 views 0 download

description

 

Transcript of Jenkins und Perl-Projekte

24

Ein Tag um die Welt zu retten das Release fertig zu machen!

1 1 1 1 1 1 1

1111111

15 16 17 18 19 20 21

28272625242322

1 2 3 4 5 6 7

141312111098

313029

HEUTE

Release

1 1 1 1 1 1 1

1111111

15 16 17 18 19 20 21

28272625242322

1 2 3 4 5 6 7

141312111098

313029

24

Release!

09:00arbeiten

16:40testen

1..3ok 1ok 2ok 3

1..6ok 1ok 2ok 3ok 4ok 5ok 6

17:00commit

git commit -m „...“ -agit push origin master

git commit -m „...“ -agit push origin master

00:00Release

Installation Paket 1Installation Paket 2Update DatenbankInstallation Paket 3Installation Paket 4Rollback Paket 4Installation Abhängigkeiten Paket 5Installation Paket 5Installation Paket 4Live-Schalten

So nahm das Schicksal seinen Lauf...

27.01.09:00

Teammeeting

Am 24.02. gibt’s ein ReleaseJack: Sie setzen Feature 1 um

Chloe: Sie implementieren Feature 2

07.02.09:00Büros

20.02.11:00Büro

git commit -m „...“ -agit commit -m „...“ -a

1..3ok 1ok 2ok 3

1..6ok 1ok 2ok 3ok 4ok 5ok 6

23.02.17:00Büro

git commit -m „...“ -agit commit -m „...“ -a

1..3ok 1ok 2ok 3

1..6ok 1ok 2ok 3ok 4ok 5ok 6

Wie es hätte laufen können...

27.01.09:00

Teammeeting

Am 24.02. gibt’s ein ReleaseJack: Sie setzen Feature 1 um

Chloe: Sie implementieren Feature 2Wir setzen jetzt Jenkins ein...

07.02.09:00Büros

20.02.11:00Büro

git commit -m „...“ -agit commit -m „...“ -a

1..3ok 1ok 2ok 3

1..6ok 1ok 2ok 3ok 4ok 5ok 6

1..9ok 1ok 2ok 3ok 4ok 5ok 6ok 7not ok 8ok 9

Sie haben Post!

See <http://perl5.git.perl.org:8080/job/perl5/860/changes>Changes:[jack] Add description of new change process for http://dev.perl.org------------------------------------------[...truncated 11121 lines...]../lib/DBM_Filter/t/01error.t ..................................... ok../lib/DirHandle.t ................................................ ok../dist/Math-BigInt/t/calling.t ................................... ok../lib/Net/netent.t ............................................... skipped: no loopback net../lib/Pod/t/InputObjects.t ....................................... ok../lib/Net/protoent.t ............................................. ok../lib/Pod/t/Select.t ............................................. ok../cpan/IO-Compress/t/109merge-deflate.t .......................... ok../lib/feature/unicode_strings.t .................................. ok../cpan/IO-Compress/t/109merge-gzip.t ............................. ok../cpan/IO-Compress/t/109merge-rawdeflate.t ....................... ok../cpan/IO-Compress/t/109merge-zip.t .............................. skipped: not implemented yet../lib/strict.t ................................................... ok../cpan/IO-Compress/t/110encode-bzip2.t ........................... okx2p/s2p.t ......................................................... ok../cpan/IO-Compress/t/110encode-deflate.t ......................... ok../cpan/IO-Compress/t/110encode-gzip.t ............................ ok../cpan/IO-Compress/t/110encode-rawdeflate.t ...................... ok../cpan/IO-Compress/t/110encode-zip.t ............................. ok../cpan/IO-Compress/t/111const-deflate.t .......................... ok../cpan/IO-Compress/t/999pod.t .................................... skipped: Test::Pod 1.00 required for testing POD../cpan/IO-Compress/t/cz-01version.t .............................. okArgument "xM-^\" isn't numeric in numeric eq (==) at (eval in cmp_ok) t/cz-03zlib-v1.t line 1244.Argument "M-sTHM-LUHTM-ppM-tQM-0400PHM-NM-O-(-I-^B\0OM-^V^G&" isn't numeric in numeric eq (==) at (eval in cmp_ok) Argument "" isn't numeric in numeric eq (==) at (eval in cmp_ok) t/cz-03zlib-v1.t line 1248.../cpan/IO-Compress/t/cz-03zlib-v1.t .............................. ok../cpan/IO-Compress/t/cz-05examples.t ............................. ok../cpan/IO-Compress/t/cz-06gzsetp.t ............................... ok../cpan/IO-Compress/t/cz-08encoding.t ............................. okTest Summary Report-------------------porting/podcheck.t (Wstat: 0 Tests: 1513 Failed: 1) Failed test: 288../cpan/CGI/t/tmpdir.t (Wstat: 0 Tests: 9 Failed: 0) TODO passed: 3-9Files=2321, Tests=535200, 315 wallclock secs (107.60 usr 94.18 sys + 891.95 cusr 345.99 csys = 1439.72 CPU)Result: FAILmake: *** [test_harness] Error 1Build step 'Execute shell' marked build as failure

23.02.17:00Büro

git commit -m „...“ -agit commit -m „...“ -a

1..3ok 1ok 2ok 3

1..6ok 1ok 2ok 3ok 4ok 5ok 6

Sie haben Post!

1..9ok 1ok 2ok 3ok 4ok 5ok 6ok 7ok 8ok 9

Jenkins build is back to normal : perl5 #861

Continuous Integration

● Integration● Zusammenfügen von Programmkomponenten

● Continuous● Kontinuierlich / stetig / regelmäßig● Nicht erst kurz vor Release

Vorteil CI

● Release-Prozess wird formalisiert● Rechner spürt keine Hektik● Rechner vergisst den Termin nicht● Automatisierte Mails rufen weniger Emotionen

hervor● Standards werden forciert

Frühzeitige Fehlerentdeckung hilft

● Kosten für Fehlerbehebung steigt stark mit der Zeit des Projekts

● Je früher ein Fehler entdeckt wird, desto einfacher ist er im Code zu finden – Integrationsaufwand sinkt

CI ist...

● … ein Mittel um Risiken zu minimieren● … eine Hilfe, die Qualität von Software zu

steigern● … eine Möglichkeit, sich Gedanken zum

Release-Prozess zu machen – und damit auch zu dokumentieren

Jenkins / Hudson

● Continuous Integration Server● In Java geschrieben (mind. JRE 1.5)● Hauptsächlich für Java-Projekte gedacht● In „wenigen Sekunden“ installiert und prinzipiell

lauffähig/einsatzbereit● Testing / Deployment● Sammelt Historie● Informiert Nutzer (E-Mail, SMS, Twitter, ...)

Jenkins / Hudson

● Intuitive Bedienung● REST-Schnittstelle● Flexibel / Erweiterbar● Verteilte Build-Vorgänge über mehrere Server● Open Source● Keine native Unterstützung für Perl

Installation Jenkins

● Gängige Linuxe: Über die Paketverwaltung● Windows: Installer von jenkins-ci.org

herunterladen und entpacken

Konfiguration

● Sehr fein einstellbar, hier aber nicht Thema● Benutzverwaltung● Apache-Anbindung● SMTP-Anbindung

Arten von Projekten

● Maven 2/3● Externen Job überwachen● Multikonfigurationsprojekt● FreeStyle

Multikonfigurationsprojekte

● Sehr flexibel konfigurierbar● Praktisch für Tests verschiedener

Konfigurationen● Versch. Perl-Versionen● Versch. Datenbanken

Jenkins und Perl

● Keine native Unterstützung für Perl● Kann beliebige Tools aufrufen● Auf CPAN findet man alle notwendigen Sachen

FreeStyle Projekte

● Für Perl-Projekte die richtige Wahl● Frei konfigurierbar

Projekt einrichten

Projekt einrichten

Projekt einrichten

Projekt einrichten

Projekt einrichten

Projekt einrichten

Fertig!

Builds laufen lassen

● Manuell● Periodisch● Durch commit

Build laufen lassen

Devel::Cover

Devel::Cover

Devel::Cover

Mehr CI für Perl

● Travis-CI (travis-ci.org)● Jitterbug● Hudson/Jenkins● Test::Continuous

Literatur

● $foo – Perl-Magazin Nr. 21 (01/2012)● Jenkins – kurz & gut (O'Reilly)● Continuous Integration mit Hudson (d.punkt

Verlag)