Jenkins Pipelines

Werbung
.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
Rollenverteilung im Projekt
2
Jenkins Pipelines
3
Demo
4
Rezepte
5
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
1 Frau
14 Jahre Java
7 Jahre PL/SQL
3,5 Jahre Direktbank
7 Jahre
Absatzfinanzierung
© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
@ahus1de
4
Build- und Delivery-Pipelines als Code mit Jenkins
1
Rollenverteilung im Projekt
2
Jenkins Pipelines
3
Demo
4
Rezepte
5
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
Rollenverteilung im Projekt
2
Jenkins Pipelines
3
Demo
4
Rezepte
5
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
Rollenverteilung im Projekt
2
Jenkins Pipelines
3
Demo
4
Rezepte
5
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
Rollenverteilung im Projekt
2
Jenkins Pipelines
3
Demo
4
Rezepte
5
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: "[email protected]",
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
Rollenverteilung im Projekt
2
Jenkins Pipelines
3
Demo
4
Rezepte
5
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
[email protected]
@ahus1de
.consulting .solutions .partnership
msg systems ag (Headquarters)
Robert-Buerkle-Str. 1, 85737 Ismaning
Germany
www.msg-systems.com
Herunterladen