.consulting.solutions.partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal IT Consultant Entwicklertag Frankfurt 16.02.2017
Build- und Delivery-Pipelines als Code mit Jenkins 1 2 3 4 5 Rollenverteilung im Projekt Jenkins Pipelines Demo Rezepte Projekterfahrungen msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 2
Mein Sponsor und Arbeitgeber msg systems ag Gegründet 1980 18 Büros in Deutschland präsent in 25 Länder Mehr als 6.000 Mitarbeiter 727 Millionen Umsatz 2015 msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 3
Wer ich bin Principal IT Consultant im Geschäftsbereich Travel & Logistics 501 gefundene Geocaches 2 Kinder 14 Jahre Java 1 Frau 7 Jahre PL/SQL 3,5 Jahre Direktbank 7 Jahre Absatzfinanzierung @ahus1de msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 4
Build- und Delivery-Pipelines als Code mit Jenkins 1 2 3 4 5 Rollenverteilung im Projekt Jenkins Pipelines Demo Rezepte Projekterfahrungen msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 5
Rollenverteilung im Projekt Klassische Rollenverteilung in Projekten XML Developer Build Engineer msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 6
Rollenverteilung im Projekt Klassische Rollenverteilung in Projekten XML XML Developer Build Engineer msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 7
Rollenverteilung im Projekt Herausforderungen Änderung der Build-Konfiguration nicht auf eine Person beschränken Versionierung der Build-Konfiguration für Nachvollziehbarkeit und Rollback Sicherheitsnetz zum Ausprobieren von Änderungen an der Build-Konfiguration msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 8
Build- und Delivery-Pipelines als Code mit Jenkins 1 2 3 4 5 Rollenverteilung im Projekt Jenkins Pipelines Demo Rezepte Projekterfahrungen msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 9
Jenkins Pipelines Jenkins Pipelines Version 1.0 verfügbar als Jenkins Workflow Dezember 2014 Umbenannt in Jenkins Pipeline Januar 2016 Verfügbar als Plugin für Jenkins 1.x Teil der Jenkins Distribution seit Jenkins 2.x msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 10
Jenkins Pipelines Variante für die Demo Alle Konfiguration sind in der Datei Jenkinsfile enthalten Build-Konfiguration ist in Groovy geschrieben Jenkinsfile ist im Root des Git-Repositories eingecheckt Multibranch-Pipeline legt für jeden Branch einen Job in einem Folder an msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 11
Build- und Delivery-Pipelines als Code mit Jenkins 1 2 3 4 5 Rollenverteilung im Projekt Jenkins Pipelines Demo Rezepte Projekterfahrungen msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 12
Demo Demo msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 13
Build- und Delivery-Pipelines als Code mit Jenkins 1 2 3 4 5 Rollenverteilung im Projekt Jenkins Pipelines Demo Rezepte Projekterfahrungen msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 14
Rezepte Hello World Alles ist Groovy Code. Ausgabe von Text, Kommentare im Code, Aufruf externen Kommandos node { echo 'Hello world! // Comments are supported! sh 'date' } msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 15
Rezepte Pipelines Mehrere Schritte. Einzeln in der GUI dargestellt. Logs separiert pro Stage. node { stage("one") { echo 'Hello world!' } stage("two") { echo 'Goodbye.' } } msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 16
Rezepte Fehlerbehandlung Fehlerbehandlung mit try/catch node { def err = null; try { /*... */ } catch (caughterror) { err = caughterror currentbuild.result = "FAILURE" } finally { /*... */ if (err) { throw err } } } msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 17
Rezepte E-Mail-Versand E-Mail-Versand unter bestimmten Bedingungen if (currentbuild.result!= 'SUCCESS' && currentbuild.result!= null /* && env.branch_name == 'master' */ ) { } def to = emailextrecipients([ [$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider'] ]) mail to: to, cc: "team@home.com", subject: "Jenkins build has finished with ${currentbuild.result}", body: "See <${env.build_url}>" msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 18
Rezepte Parallele Ausführung Mehrere Stages werden parallel ausgeführt. Schöne Darstellung im Blue Ocean Theme. node { parallel( a: { echo "this is branch a" }, b: { echo "this is branch b" } ) } msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 19
Rezepte Fehleranalyse Die Log-Dateien können lang werden. Für die Fehleranalyse bietet sich das build-failure-analyzer (BFA) Plugin an msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 20
Rezepte Build parametrisieren Nur die 10 letzten Builds aufheben properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', artifactdaystokeepstr: '', artifactnumtokeepstr: '', daystokeepstr: '', numtokeepstr: '10']]]) node { /*... */ } msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 21
Rezepte Daten aufheben Archiver, Publisher für Checkstyle, JUnit und HTML archiveartifacts 'myfiles/*.pdf' step([$class: 'JUnitResultArchiver', testresults: '**/surefirereports/*.xml']) step([$class: 'CheckStylePublisher', pattern: '**/checkstyle-result.xml', unstabletotalall: '0', usepreviousbuildasreference: false]) publishhtml(target: [allowmissing: true, alwayslinktolastbuild: false, keepall: true, reportdir: 'yourreportdir', reportfiles: 'yourreportfile', reportname: 'yourreportname']) msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 22
Rezepte Snippet Generator msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 23
Build- und Delivery-Pipelines als Code mit Jenkins 1 2 3 4 5 Rollenverteilung im Projekt Jenkins Pipelines Demo Rezepte Projekterfahrungen msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 24
Projekterfahrungen Projektstatistik eines mittelgroßen Projekts 11 Monate Laufzeit 14 Personen haben das Jenkinsfile geändert (80% der Entwickler im Projekt) 122 Änderungen am Jenkinsfile* * ohne mehrfache Änderungen des gleichen Entwicklers an einem Tag msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 25
Projekterfahrungen Jenkins Pipelines Vorteile: Entwickler können Build-Konfiguration selber ändern, dadurch kein Engpass im Projekt Versionierung der Build-Konfiguration für gute Nachvollziehbarkeit und Rollback Branches als Sicherheitsnetz zum Ausprobieren von Änderungen an der Build-Konfiguration Dokumentation im Code möglich (und erwünscht) Nachteile: Für bekannte Funktionen aus der Web-GUI müssen die Script-Befehle neu gesucht werden (Snippet Generator kann helfen) Nicht alle Plugins unterstützen Jenkins Pipelines (aber es werden ständig mehr) @ahus1de msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 26
Links Jenkins Pipeline: https://jenkins.io/doc/book/pipeline/ @ahus1de msg Februar 2017 Entwicklertag Frankfurt Build- und Delivery-Pipelines Alexander Schwartz 27
Alexander Schwartz Principal IT Consultant +49 171 5625767 alexander.schwartz@msg-systems.com msg systems ag (Headquarters) Robert-Buerkle-Str. 1, 85737 Ismaning Germany www.msg-systems.com @ahus1de.consulting.solutions.partnership