build- und delivery-pipelines als code mit jenkins · 2017-02-17 · .consulting .solutions...
TRANSCRIPT
![Page 1: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/1.jpg)
.consulting .solutions .partnership
Build- und Delivery-Pipelinesals Code mit JenkinsAlexander Schwartz, Principal IT Consultant
Entwicklertag Frankfurt – 16.02.2017
![Page 2: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/2.jpg)
Build- und Delivery-Pipelines als Code mit Jenkins
2© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
Rollenverteilung im Projekt1
Jenkins Pipelines2
Demo3
Rezepte4
Projekterfahrungen5
![Page 3: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/3.jpg)
Mein Sponsor und Arbeitgeber – msg systems ag
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 3
Gegründet 1980
Mehr als 6.000 Mitarbeiter
727 Millionen € Umsatz 2015
präsent in
25 Länder
18 Büros
in Deutschland
![Page 4: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/4.jpg)
Wer ich bin – Principal IT Consultant im Geschäftsbereich Travel & Logistics
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 4
14 Jahre Java
7 Jahre PL/SQL
7 Jahre
Absatzfinanzierung
3,5 Jahre Direktbank
1 Frau
2 Kinder501 gefundene
Geocaches
@ahus1de
![Page 5: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/5.jpg)
Build- und Delivery-Pipelines als Code mit Jenkins
5© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
Rollenverteilung im Projekt1
Jenkins Pipelines2
Demo3
Rezepte4
Projekterfahrungen5
![Page 6: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/6.jpg)
Rollenverteilung im Projekt
Klassische Rollenverteilung in Projekten
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 6
Build EngineerDeveloper
XML
![Page 7: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/7.jpg)
Rollenverteilung im Projekt
Klassische Rollenverteilung in Projekten
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 7
Developer Build Engineer
XML
XML
![Page 8: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/8.jpg)
Rollenverteilung im Projekt
Herausforderungen
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 8
• Ä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
![Page 9: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/9.jpg)
Build- und Delivery-Pipelines als Code mit Jenkins
9© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
Rollenverteilung im Projekt1
Jenkins Pipelines2
Demo3
Rezepte4
Projekterfahrungen5
![Page 10: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/10.jpg)
Jenkins Pipelines
Jenkins Pipelines
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 10
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
![Page 11: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/11.jpg)
Jenkins Pipelines
Variante für die Demo
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 11
• 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
![Page 12: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/12.jpg)
Build- und Delivery-Pipelines als Code mit Jenkins
12© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
Rollenverteilung im Projekt1
Jenkins Pipelines2
Demo3
Rezepte4
Projekterfahrungen5
![Page 13: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/13.jpg)
Demo
Demo
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 13
![Page 14: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/14.jpg)
Build- und Delivery-Pipelines als Code mit Jenkins
14© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
Rollenverteilung im Projekt1
Jenkins Pipelines2
Demo3
Rezepte4
Projekterfahrungen5
![Page 15: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/15.jpg)
Rezepte
Hello World
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 15
Alles ist Groovy Code. Ausgabe von Text, Kommentare im Code, Aufruf externen Kommandos
node {
echo 'Hello world!
// Comments are supported!
sh 'date'
}
![Page 16: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/16.jpg)
Rezepte
Pipelines
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 16
Mehrere Schritte. Einzeln in der GUI dargestellt. Logs separiert pro Stage.
node {
stage("one") {
echo 'Hello world!'
}
stage("two") {
echo 'Goodbye.'
}
}
![Page 17: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/17.jpg)
Rezepte
Fehlerbehandlung
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 17
Fehlerbehandlung mit try/catch
node {
def err = null;
try {
/* ... */
} catch (caughtError) {
err = caughtError
currentBuild.result = "FAILURE"
} finally {
/* ... */
if (err) {
throw err
}
}
}
![Page 18: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/18.jpg)
Rezepte
E-Mail-Versand
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 18
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: "[email protected]",
subject: "Jenkins build has finished with ${currentBuild.result}",
body: "See <${env.BUILD_URL}>"
}
![Page 19: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/19.jpg)
Rezepte
Parallele Ausführung
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 19
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"
}
)
}
![Page 20: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/20.jpg)
Rezepte
Fehleranalyse
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 20
Die Log-Dateien können lang werden.
Für die Fehleranalyse bietet sich das build-failure-analyzer (BFA) Plugin an
![Page 21: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/21.jpg)
Rezepte
Build parametrisieren
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 21
Nur die 10 letzten Builds aufheben
properties([[$class: 'BuildDiscarderProperty',
strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '',
artifactNumToKeepStr: '', daysToKeepStr: '',
numToKeepStr: '10']]])
node {
/* ... */
}
![Page 22: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/22.jpg)
Rezepte
Daten aufheben
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 22
Archiver, Publisher für Checkstyle, JUnit und HTML
archiveArtifacts 'myFiles/*.pdf'
step([$class: 'JUnitResultArchiver', testResults: '**/surefire-
reports/*.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'])
![Page 23: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/23.jpg)
Rezepte
Snippet Generator
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 23
![Page 24: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/24.jpg)
Build- und Delivery-Pipelines als Code mit Jenkins
24© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
Rollenverteilung im Projekt1
Jenkins Pipelines2
Demo3
Rezepte4
Projekterfahrungen5
![Page 25: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/25.jpg)
Projekterfahrungen
* ohne mehrfache Änderungen des gleichen Entwicklers an einem Tag
Projektstatistik eines mittelgroßen Projekts
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 25
11 Monate Laufzeit
14 Personen haben das Jenkinsfile geändert
(80% der Entwickler im Projekt)
122 Änderungen am Jenkinsfile*
![Page 26: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/26.jpg)
Projekterfahrungen
Jenkins Pipelines
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 26
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
![Page 27: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/27.jpg)
Links
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 27
Jenkins Pipeline:
https://jenkins.io/doc/book/pipeline/
@ahus1de
![Page 28: Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal](https://reader034.vdocuments.net/reader034/viewer/2022042223/5ec98ce9677e3c7a13593367/html5/thumbnails/28.jpg)
.consulting .solutions .partnership
Alexander Schwartz
Principal IT Consultant
+49 171 5625767
@ahus1de
msg systems ag (Headquarters)
Robert-Buerkle-Str. 1, 85737 Ismaning
Germany
www.msg-systems.com