+ All Categories
Home > Documents > Build- und Delivery-Pipelines als Code mit Jenkins · 2017-02-17 · .consulting .solutions...

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

Date post: 22-May-2020
Category:
Upload: others
View: 5 times
Download: 0 times
Share this document with a friend
28
.consulting .solutions .partnership Build- und Delivery-Pipelines als Code mit Jenkins Alexander Schwartz, Principal IT Consultant Entwicklertag Frankfurt 16.02.2017
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

.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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.consulting .solutions .partnership

Alexander Schwartz

Principal IT Consultant

+49 171 5625767

[email protected]

@ahus1de

msg systems ag (Headquarters)

Robert-Buerkle-Str. 1, 85737 Ismaning

Germany

www.msg-systems.com


Recommended