Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions...

Post on 22-May-2020

5 views 0 download

transcript

.consulting .solutions .partnership

Build- und Delivery-Pipelinesals Code mit JenkinsAlexander Schwartz, Principal IT Consultant

Entwicklertag Frankfurt – 16.02.2017

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

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

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

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

Rollenverteilung im Projekt

Klassische Rollenverteilung in Projekten

© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 6

Build EngineerDeveloper

XML

Rollenverteilung im Projekt

Klassische Rollenverteilung in Projekten

© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 7

Developer Build Engineer

XML

XML

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

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

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

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

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

Demo

Demo

© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 13

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

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'

}

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.'

}

}

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

}

}

}

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: "team@home.com",

subject: "Jenkins build has finished with ${currentBuild.result}",

body: "See <${env.BUILD_URL}>"

}

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"

}

)

}

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

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 {

/* ... */

}

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'])

Rezepte

Snippet Generator

© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 23

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

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*

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

Links

© msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 27

Jenkins Pipeline:

https://jenkins.io/doc/book/pipeline/

@ahus1de

.consulting .solutions .partnership

Alexander Schwartz

Principal IT Consultant

+49 171 5625767

alexander.schwartz@msg-systems.com

@ahus1de

msg systems ag (Headquarters)

Robert-Buerkle-Str. 1, 85737 Ismaning

Germany

www.msg-systems.com